Hallo zusammen, ich habe eine Art Chat-Server, welcher Aus einem Socket für die Clienten, den verarbeitenden Client, einem client, einem Serversocket und einem Server besteht. (Ja, ist eventuell etwas umständlich gelöst)
Klassen:
Socket.java
ServerSocket.java
Server.java
EchoClient.java (Objekt, über das der Socket angesteuert wird. besitzt verbinden(), senden(), empfangen(), beenden() )
Client.java (Der eigentliche Client)
ClientGUI.java (Hat eine println()-Methode, welche von Client genutzt wird zur ausgabe und startet die senden()-Methode von Client
Der Client führt im Konstruktor folgende Zeilen aus:
[java=22]System.out.println("Client wurde gestartet.\n");
// Verbindung zum Server aufbauen
if (!client.verbinden("localhost", 7)) {
System.out.println("verbinden false");
return;
} else {
System.out.println("verbinden true");
System.out.println("<< " + client.empfangen() + "\n");
}
new ClientThread();[/code]
Vorher wurde der Server gestartet, welche folgende Zeilen beinhaltet:
[JAVA=42] public void starteServer() {
while (true) {
try {
Socket clientSocket = serverSocket.accept();
System.out.println("\nVerbindung zum Client aufgenommen.");
offeneSockets.add(new ServerThread(clientSocket));
} catch (IOException e) {
System.err.println("Fehler bei Client-Verbindung." + e);
System.exit(2);
}
}
}[/code]
Die run() des ServerThreads beinhaltet folgende Zeilen:
[JAVA=76] public void run() {
// Client - Server Kommunikation
try {
clientSocket.write(requirements);
System.out.println(requirements);
String zeile = clientSocket.readLine();
while (!zeile.equals("ende")) {
System.out.println(">> " + zeile);
sendToAll(zeile + '\n');
zeile = clientSocket.readLine();
}
// ende empfangen, Socket schließen
System.out.println("Verbindung zum Client beendet.");
clientSocket.write("ende");
clientSocket.close();
} catch (IOException e) {
System.err.println("Fehler beim Echo." + e);
}
}[/code]
Nun zu meinem Problem:
- Der Server startet ohne Probleme,
- Der Client startet auch, printet noch "verbinden true"
- Das println() in der nächsten Zeile jedoch schon nicht mehr.
- selbst der Server printet nach dem .write() noch den String aus!
- Woran könnte das liegen? Ich habe schon überleget, ob es mit Timing zu tun haben könnte?
Fehlen dir Infos? Ich wäre sehr erfreut über ein paar Kommentare oder Hinweise!
Danke euch!
Klassen:
Socket.java
ServerSocket.java
Server.java
EchoClient.java (Objekt, über das der Socket angesteuert wird. besitzt verbinden(), senden(), empfangen(), beenden() )
Client.java (Der eigentliche Client)
ClientGUI.java (Hat eine println()-Methode, welche von Client genutzt wird zur ausgabe und startet die senden()-Methode von Client
Der Client führt im Konstruktor folgende Zeilen aus:
[java=22]System.out.println("Client wurde gestartet.\n");
// Verbindung zum Server aufbauen
if (!client.verbinden("localhost", 7)) {
System.out.println("verbinden false");
return;
} else {
System.out.println("verbinden true");
System.out.println("<< " + client.empfangen() + "\n");
}
new ClientThread();[/code]
Vorher wurde der Server gestartet, welche folgende Zeilen beinhaltet:
[JAVA=42] public void starteServer() {
while (true) {
try {
Socket clientSocket = serverSocket.accept();
System.out.println("\nVerbindung zum Client aufgenommen.");
offeneSockets.add(new ServerThread(clientSocket));
} catch (IOException e) {
System.err.println("Fehler bei Client-Verbindung." + e);
System.exit(2);
}
}
}[/code]
Die run() des ServerThreads beinhaltet folgende Zeilen:
[JAVA=76] public void run() {
// Client - Server Kommunikation
try {
clientSocket.write(requirements);
System.out.println(requirements);
String zeile = clientSocket.readLine();
while (!zeile.equals("ende")) {
System.out.println(">> " + zeile);
sendToAll(zeile + '\n');
zeile = clientSocket.readLine();
}
// ende empfangen, Socket schließen
System.out.println("Verbindung zum Client beendet.");
clientSocket.write("ende");
clientSocket.close();
} catch (IOException e) {
System.err.println("Fehler beim Echo." + e);
}
}[/code]
Nun zu meinem Problem:
- Der Server startet ohne Probleme,
- Der Client startet auch, printet noch "verbinden true"
- Das println() in der nächsten Zeile jedoch schon nicht mehr.
- selbst der Server printet nach dem .write() noch den String aus!
- Woran könnte das liegen? Ich habe schon überleget, ob es mit Timing zu tun haben könnte?
Fehlen dir Infos? Ich wäre sehr erfreut über ein paar Kommentare oder Hinweise!
Danke euch!