Blue Effect
Mitglied
Guten Morgen Sportsfreunde,
ich habe einen Socket, der ständig Daten empfängt und sendet - klappt wunderbar.
Wenn ich aufgrund Verbindungsprobleme des Servers keine Antwort erhalte, möchte ich bestimmte Dinge der GUI blockieren. Bei mir lokal bleibt er aber nur im Stack bei socketRead() anstatt irgendwann dann mal eine Exception auszulösen. Das daraus ergebene nächste Problem ist, dass ich bei Verbindungs-Wiederaufbau dennoch keine Daten mehr erhalte. IOException fange ich ab, wird aber in dem Fall nicht ausgelöst.
Ist das normal? Kann ich eine Zeit angeben, die maximal für das Lesen einer Zeile gebraucht wird? Der Server, mit dem ich mich verbinde, sendet alle 10 Sekunden zur Sicherheit eine Antwort.
Im Notfall wollte ich im anderen Thread den letzten Stamp abgleichen, ist aber sicherlich nicht sauber, weil er im Socketleser-Aufruf-Thread ja trotzdem ganze Zeit im Stack hängt.
Danke im Voraus für jeden Tipp
ich habe einen Socket, der ständig Daten empfängt und sendet - klappt wunderbar.
Wenn ich aufgrund Verbindungsprobleme des Servers keine Antwort erhalte, möchte ich bestimmte Dinge der GUI blockieren. Bei mir lokal bleibt er aber nur im Stack bei socketRead() anstatt irgendwann dann mal eine Exception auszulösen. Das daraus ergebene nächste Problem ist, dass ich bei Verbindungs-Wiederaufbau dennoch keine Daten mehr erhalte. IOException fange ich ab, wird aber in dem Fall nicht ausgelöst.
Ist das normal? Kann ich eine Zeit angeben, die maximal für das Lesen einer Zeile gebraucht wird? Der Server, mit dem ich mich verbinde, sendet alle 10 Sekunden zur Sicherheit eine Antwort.
Im Notfall wollte ich im anderen Thread den letzten Stamp abgleichen, ist aber sicherlich nicht sauber, weil er im Socketleser-Aufruf-Thread ja trotzdem ganze Zeit im Stack hängt.
Java:
socket = socketFactory.createSocket(host, port);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = in.readLine();
String komplettesXML="";
while (msg != null) {
System.out.println(msg);
if(msg.equals("")==true)
{
setRadarnachricht(komplettesXML);
komplettesXML="";
} else komplettesXML+=msg;
buf.append(msg);
msg = in.readLine();
if(laeuft==false)
{
break;
}
}
Danke im Voraus für jeden Tipp