Socket Client empfängt nicht

lukengda

Mitglied
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!
 
Was ich eventuell hinzufügen sollte: Die Sockets und auch die Klasse EchoClient funktionieren alle einwandfrei, ohne der Startübergabe eines Strings hat alles perfekt funktioniert...
 
Was passiert denn in der Methode

Java:
client.empfangen()

Wenn in dieser Methode ein read ausgeführt wird, ist klar warum dein println nicht ausgeführt wird.
Denn read ist ein blockierender Methodenaufruf und wartet auf den Empfang von Daten!

Anmerkung:
Sowas ist - vorsichtig ausgedrückt - eine sehr sehr unschöne Konstruktion ???:L
Java:
 System.out.println("<< " + client.empfangen() + "\n");

Gruß
JP
 
Ich mache nur, was man mir sagt! Und ich weiß mitlerweile wo das Problem lag, hatte das \n beim Server nicht richtig gesetzt. Jetzt ist dafür Eclipse tot.... Naja Danke für die nette Hilfe! (Wie macht man es denn - vorsichtig ausgedrückt - schöner?
 

Zurück
Oben