D
da1l6
Gast
Hallo
Habe einen einfachen multi-User Chat geschrieben, der auch soweit funktioniert, aber wenn die Verbindung aufgrund eines Fehlers abbricht (etwa wenn ich testweise einen Client abschieße oder das LAN-Kabel ziehe) dann kommt keine Fehlermelung, das Socket Objekt meldet isConnectd == true und sogar das Senden von Daten mittels
wird kommentarlos akzepiert. Nur wenn ich ein
danach einfüge bekomme ich beim 2. mal senden seit der Unterbrechung eine SocketException: Broken Pipe.
Das kann irgentwie nicht der Weisheit letzter Schluss sein.
Zumal TCP ja schließlich die Übertragungssicherheit garantieren müsste, sodass Daten eben nicht kommentarlos versickern!
Zum Senden dient einfach:
So sieht der Code im Thread zum empfangen aus:
Hoffe ihr könnt mir helfen!
da1l6
Java: 1.5
OS: KUbuntu Linux 5.10
Habe einen einfachen multi-User Chat geschrieben, der auch soweit funktioniert, aber wenn die Verbindung aufgrund eines Fehlers abbricht (etwa wenn ich testweise einen Client abschieße oder das LAN-Kabel ziehe) dann kommt keine Fehlermelung, das Socket Objekt meldet isConnectd == true und sogar das Senden von Daten mittels
Code:
Socket.getOutputStream().write(data);
Code:
Socket.getOutputStream().flush();
Das kann irgentwie nicht der Weisheit letzter Schluss sein.
Zumal TCP ja schließlich die Übertragungssicherheit garantieren müsste, sodass Daten eben nicht kommentarlos versickern!
Zum Senden dient einfach:
Code:
private void SendData(byte b[]) throws SendDataFaildException {
try {
synchronized(ConnectionSocket) {
ConnectionSocket.getOutputStream().write(b);
ConnectionSocket.getOutputStream().flush();
}
} catch (IOException ex) {
throw new SendDataFaildException(RemoteHost,ex);
}
}
So sieht der Code im Thread zum empfangen aus:
Code:
public void run() {
boolean connected = true;
InputStream in = null;
int len = 0;
byte[] b = null;
synchronized(ConnectionSocket) {
try {
in = ConnectionSocket.getInputStream();
} catch (IOException ex) {
ConnectionError(ex);
connected = false;
}
}
while (!TerminateRequest && connected) {
synchronized(ConnectionSocket) {
connected = ConnectionSocket.isConnected() && !ConnectionSocket.isInputShutdown() && !ConnectionSocket.isOutputShutdown();
}
if (!connected) {
ConnectionClosed();
} else {
try {
synchronized(in) {
len = in.available();
if (len > 0) {
b = new byte[len];
in.read(b);
}
}
if (len > 0) {
DataArrival(b);
}
} catch (IOException ex) {
ConnectionError(ex);
connected = false;
}
}
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
}
Hoffe ihr könnt mir helfen!
da1l6
Java: 1.5
OS: KUbuntu Linux 5.10