Vreau sa fac un Chat, si am cate o eroare la fiecare clasa.
Clasa
DialogUtilizator
Cod:
import javax.swing.JOptionPane;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DialogUtilizator extends JFrame {
private JTextField inTextGrafic; // Intrare - linie de text grafica (JtextField)
private JTextArea outTextGrafic; // Iesire - zona de text grafica (JtextArea)
private JScrollBar vertical;
private ConexiuneRetea conexiune;
private String sirCitit;
// Initializari grafice
public DialogUtilizator(String nume) { // constructor
super(nume); // Stabilire titlu fereastra (JFrame)
Container containerCurent = this.getContentPane();
containerCurent.setLayout(new BorderLayout());
// Zona de text non-editabila de iesire (cu posibilitati de defilare)
outTextGrafic = new JTextArea(5, 40);
JScrollPane scrollPane = new JScrollPane(outTextGrafic,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
vertical = scrollPane.getVerticalScrollBar();
containerCurent.add("Center", scrollPane);
outTextGrafic.setEditable(false);
// Camp de text editabil de intrare
inTextGrafic = new JTextField(40);
containerCurent.add("South", inTextGrafic);
// Inregistrarea "ascultatorului" de "evenimente actionare" la
// "obiectul sursa" intrare de text
inTextGrafic.addActionListener(new AscultatorInText());
// Iesire din program la inchiderea ferestrei
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack(); // Impachetarea (compactarea) componentelor in container
setVisible(true); // Fereastra devine vizibila
inTextGrafic.requestFocus(); // Cerere focus pe intrarea de text }
public String nextLine() {
String linie = inTextGrafic.getText(); // Citirea unei linii text
inTextGrafic.setText(""); // Golirea intrarii text
return linie;
}
public int nextInt() {
String linie = inTextGrafic.getText(); // Citirea unei linii text
inTextGrafic.setText(""); // Golirea intrarii text
return Integer.parseInt(linie);
}
public void printLine(String text) {
outTextGrafic.append(text + "\n");
vertical.setValue(vertical.getMaximum() - vertical.getVisibleAmount());
validate(); repaint();
}
public void setConexiune(ConexiuneRetea conexiune) {
this.conexiune = conexiune;
}
// Clasa interna "ascultator" de "evenimente actionare"
// implementeaza interfata ActionListener
class AscultatorInText implements ActionListener {
// Tratarea actionarii intrarii de text (introducerii unui "Enter")
public void actionPerformed(ActionEvent ev) {
sirCitit = nextLine();
conexiune.printLine(sirCitit);
if (sirCitit.equals(new String("BYE"))) System.exit(0); //Conditie oprire
}
}
}
Clasa
ConexiuneRetea
Cod:
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class ConexiuneRetea {
private Socket conexiune;
private Scanner scannerTCP;
private PrintStream printerTCP;
public ConexiuneRetea(Socket conexiune) throws IOException{
this.conexiune = conexiune;
this.scannerTCP = new Scanner(conexiune.getInputStream());
this.printerTCP = new PrintStream(conexiune.getOutputStream());
}
public String nextLine() {
return this.scannerTCP.nextLine();
}
public int nextInt() {
return this.scannerTCP.nextInt();
}
public void printLine(String text) {
this.printerTCP.println(text);
this.printerTCP.flush();
}
public String getLocalAddress() {
return socket.getLocalAddress().getHostAddress();
}
public String getRemoteAddress() {
return socket.getInetAddress().getHostAddress();
}
}
}
Clasa
ServerChatN2N
Cod:
import java.net.*;
import java.io.*;
import javax.swing.JOptionPane;
public class ServerChatN2N extends Thread {
private static int numarClienti = 0;
private static DialogUtilizator04 dialog;
private static int portTCP;
private static ServerSocket serverTCP;
private static Socket socketTCP;
public static final int NUMAR_MAXIM_CLIENTI = 10;
private static ConexiuneRetea03[] conexiuni;
private int numarulConexiuniiCurente; // incepe cu 0
public ServerChatN2N(int numarulConexiuniiCurente) throws IOException {
this.numarulConexiuniiCurente = numarulConexiuniiCurente;
}
public static void main (String args[]) throws IOException {
dialog = new DialogUtilizator04("SERVER CHAT N2N");
conexiuni = new ConexiuneRetea03[NUMAR_MAXIM_CLIENTI];
portTCP = Integer.parseInt(JOptionPane.showInputDialog(
"Introduceti numarul de port al serverului"));
serverTCP = new ServerSocket(portTCP); // Creare socket server
while (true) {
socketTCP = serverTCP.accept(); // Creare socket
conexiuni[numarClienti] = new
ConexiuneRetea03(socketTCP);
ServerChatN2N server = new ServerChatN2N(numarClienti++);
server.start();
}
}
public void removeConnexion(int crt) {
for (int i=crt; i<numarClienti-1; i++) {
conexiuni[i] = conexiuni[i+1];
}
numarClienti--;
}
public void run() { // Fir executie receptie prin socket
String mesaj;
while(true) {
mesaj = this.conexiuni[numarulConexiuniiCurente].nextLine();
// this.dialog.printLine(mesaj);
for (int i=0; i<numarClienti; i++) {
conexiuni[i].printLine(mesaj);
}
// Testarea conditiei de oprire
if (mesaj.equals("BYE")) {
removeConnexion(numarulConexiuniiCurente);
this.dialog.printLine("Bye!");
this.stop();
}
}
}
}
Clasa
ClientChatN2N
Cod:
import java.net.*;
import java.io.*;
import javax.swing.JOptionPane;
public class ClientChatN2N extends Thread {
private DialogUtilizator04 dialog;
private ConexiuneRetea03 conexiune;
private Socket socketTCP;
private int portTCP;
private InetAddress adresaIP;
public ClientChatN2N() throws IOException {
dialog = new DialogUtilizator04("CLIENT CHAT N2N");
portTCP = Integer.parseInt(JOptionPane.showInputDialog(
"Introduceti numarul de port al serverului"));
adresaIP = InetAddress.getByName(JOptionPane.showInputDialog(
"Introduceti adresa IP a serverului"));
socketTCP = new Socket(adresaIP, portTCP); // Creare socket
conexiune = new ConexiuneRetea03(socketTCP);
dialog.printLine("\nPentru oprire introduceti \"BYE\" si <Enter>\n");
}
public static void main (String args[]) throws IOException {
ClientChatN2N client = new ClientChatN2N();
client.start();
String mesaj;
while(true) {
mesaj = client.dialog.nextLine("Introduceti mesajul");
client.conexiune.printLine(mesaj);
if (mesaj.equals("BYE")) break; // Testarea conditiei de oprire
}
try {
client.socketTCP.close(); // Inchidere socket (implicit fluxuri)
} catch (IOException ioe) {};
client.dialog.printLine("Bye!");
System.exit(0);
}
public void run() { // Fir executie receptie prin socket
String mesaj;
while(true) {
mesaj = this.conexiune.nextLine();
this.dialog.printLine(conexiune.getLocalAddress() + mesaj);
if (mesaj.equals("BYE")) break; // Testarea conditiei de oprire
}
try {
this.socketTCP.close(); // Inchidere socket (implicit fluxuri)
} catch (IOException ioe) {};
this.dialog.printLine("Bye!");
System.exit(0);
}
}
Multumesc.