M
maddriver
Gast
Hallo ich habe folgendes Problem:
Für eine TCP verbindung setze ich socket.setKeepAlive(true). Das aktiviert auch die Keep Alives vom Protokollstack des Betriebssystems. Ich habe das mit dem Wireshark überprüft, soweit so gut.
Das einzige Problem an der Sache ist, das ich keine Exception bekomme wenn ich dann tatsächlich das Netzwerkkabel ziehe. Wenn ich irgendwelche anderen Daten (also außer dem Keep Alive des Betriebssystems) sende, bekomme ich eine Connection closed Exception, und genau das Verhalten würde ich auch von den Keep Alives erwarten, aber es passiert einfach nicht. Hat da jemand erfahrung oder weiß jemand was man da tun kann?
P.S.: Ich habe dasselbige mit Qt probiert und da funktioniert es einwandfrei, nur muß ich jetzt leider für ein Projekt auf Java umsteigen und das dort implementieren.
Ach ja im Betriebssystem hab ich das Keep alive Intervall auf eine Sekunde und die Keep alive time auf 3 Sekunden gesetzt, und dazu 10 Wiederholungen. Wie gesagt nach etwa 10 sekunden kommt in QT das Signal das die Connection zum Host abgebrochen ist, eben durch die Keep Alives, aber in Java passiert das nicht,obwohl ich Keep Alives aktiviert habe , die auch vom Client gesendet werden.
Hierzu mal ein bischen sourcecode:
Für eine TCP verbindung setze ich socket.setKeepAlive(true). Das aktiviert auch die Keep Alives vom Protokollstack des Betriebssystems. Ich habe das mit dem Wireshark überprüft, soweit so gut.
Das einzige Problem an der Sache ist, das ich keine Exception bekomme wenn ich dann tatsächlich das Netzwerkkabel ziehe. Wenn ich irgendwelche anderen Daten (also außer dem Keep Alive des Betriebssystems) sende, bekomme ich eine Connection closed Exception, und genau das Verhalten würde ich auch von den Keep Alives erwarten, aber es passiert einfach nicht. Hat da jemand erfahrung oder weiß jemand was man da tun kann?
P.S.: Ich habe dasselbige mit Qt probiert und da funktioniert es einwandfrei, nur muß ich jetzt leider für ein Projekt auf Java umsteigen und das dort implementieren.
Ach ja im Betriebssystem hab ich das Keep alive Intervall auf eine Sekunde und die Keep alive time auf 3 Sekunden gesetzt, und dazu 10 Wiederholungen. Wie gesagt nach etwa 10 sekunden kommt in QT das Signal das die Connection zum Host abgebrochen ist, eben durch die Keep Alives, aber in Java passiert das nicht,obwohl ich Keep Alives aktiviert habe , die auch vom Client gesendet werden.
Hierzu mal ein bischen sourcecode:
Java:
static void openLANConnection(String IP,int Port){
if (connectionactive==false)
try {
Networksocket = new Socket(IP,Port);
Networksocket.setKeepAlive(true);
out = new PrintWriter(Networksocket.getOutputStream(), true);
in = new BufferedReader(
new InputStreamReader(Networksocket.getInputStream()));
connectionactive=true;
} catch (SocketException e) {
System.out.println("Socket Exception\n");
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
System.out.println("Failed to Connect! Connection lost!\n");
// TODO Auto-generated catch block
e.printStackTrace();
}