Inputstream Timeout

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Hallo,

in meiner Applikation verwende ich eine TCP Schnittstelle (Socket) um mich mit einem Remotegerät zu verbinden, Mittels OutputStream und InputStream sende und empfange ich die Daten. Das klappt so weit alles wunderbar.
Mein Problem liegt darin, ein reconnect zu machen, wenn ich eine gewisse Zeit lange auf einen Anfrage keine Antwort bekommen habe.
Das hat jetzt meiner Meinung nach nichts mit dem Socket- Timeout zu tun, das hat ich auch eingestellt und zieht, wenn keine Verbindung hergestellt werden konnte, hilft aber nichts, wenn die Verbindung besteht, das Remote- Gerät aber keine Daten mehr sendet.

Kennt jemand vielleicht ein Möglichkeit, wie ich auf dem InputStream einen Timeout setzen kann bzw. wie würdet ihr das am besten/resourcenschonensten machen in der unteren Methode (Timer, Thread?)

Methode zum Senden an Remote- Device:
Java:
public void writeToRemote(final byte[] request) {
            try {
                outputStream.write(request);
                outputStream.flush();
                sendTime = System.currentTimeMillis();              // hier müsste ich dann einen Timer starten, um erkennen zu
können, dass nach einer Zeit x keine Daten zurückgekommen sind  
                }
            catch(SocketException ste) {
                System.out.println("SocketTimeoutException in SendThread run: " + ste);
                reconnect();
                }
            catch (Exception e) {
                e.printStackTrace();
                }
            }
 

MQue

Top Contributor
Hab mir selber was geschrieben, vielleicht brauchts jemand:

Java:
private boolean infiniteLoop;
private Thread timeoutThread = null;
    private void connectionAlive(final boolean start) {
        infiniteLoop = start;
        
        if(infiniteLoop == false && timeoutThread != null) {
            timeoutThread.interrupt();
            }
        else {
            timeoutThread = new Thread() {
                @Override
                public void run() {
                    while(infiniteLoop) {
                        final long currentTime = System.currentTimeMillis();
                        if(currentTime > (sendTime+timeout)) {
                            infiniteLoop = false;
                            this.interrupt();
                            reconnect();
                            }
                        }
                    }
                };
            timeoutThread.start();
            }
        }
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Du wirst nicht durm rum kommen das selbst im Protokoll zu verankern...

Im Fall von MINA (Apache MINA - Index) gibts ein "IDLE" event. Das wird ausgelöst wenn eine gewisse Zeitlang nichts mehr abgeschickt wurde. Damit triggere ich in meiner SIMON implementierung eine Ping-Nachricht die der Gegenüber mit einer Pong-Nachricht erwiedern muss.

Beim absenden von Ping setze ich einen Timer. Beim Empfangen von Pong setze ich den Timer zurück. Läuft der Timer ganz durch weiß ich dass der Gegenüber nicht "in time" geantwortet hat und dass wohlmöglich ein Verindungsdefekt vorliegt.

Siehe hierzu auch: socket : Java Glossary

Gruß
Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
S Socket String InputStream in hex umwandeln Netzwerkprogrammierung 1
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
R Socket InputStream readObject > Connection Reset Netzwerkprogrammierung 3
windl InputStream cachen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
M Socket InputStream liest nicht vollständig Netzwerkprogrammierung 7
M Was macht Thread, wenn er aus einem "leeren" Inputstream liest ? Netzwerkprogrammierung 5
K Byte für Byte aus InputStream lesen Netzwerkprogrammierung 5
F JSch - inputstream is closed Netzwerkprogrammierung 13
M Socket InputStream sendet ausgaben von OutputStream zurück Netzwerkprogrammierung 2
D Inputstream to Outputstream Netzwerkprogrammierung 3
M InputStream and ObjectInputStream zur gleichen Zeit Netzwerkprogrammierung 11
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
S Servlet InputStream leer?! Netzwerkprogrammierung 14
G HTTP-Request InputStream-Problem Netzwerkprogrammierung 5
P Inputstream "verfügbar" Netzwerkprogrammierung 4
G JPG im InputStream Netzwerkprogrammierung 2
A InputStream liest immer komplettes PHP-Script Netzwerkprogrammierung 6
A InputStream ließt nur 65536 Zeichen anstatt ganzer Puffer Netzwerkprogrammierung 8
A inputstream teilen? Netzwerkprogrammierung 4
D InputStream (Socket) mit BufferedInputStream puffern Netzwerkprogrammierung 2
M Sockets und InputStream Netzwerkprogrammierung 8
R Client nimmt den Inputstream nicht an Netzwerkprogrammierung 5
S Mail anhang in InputStream packen Netzwerkprogrammierung 5
M InputStream - Bytes gehen verloren? Netzwerkprogrammierung 3
E Problem bei Sockets/InputStream über externe Klasse Netzwerkprogrammierung 5
André B. In einen InputStream schreiben? Netzwerkprogrammierung 6
G inputstream hat plötzlich weniger inhalt Netzwerkprogrammierung 8
Z ProgressBar auf BufferedOutput- & -InputStream Netzwerkprogrammierung 2
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
P Client Timeout auffangen Netzwerkprogrammierung 2
Iron Monkey Timeout von connect Netzwerkprogrammierung 4
S socket timeout clientseitig Netzwerkprogrammierung 2
G Webserivce - Timeout in Axis - Unterschiede SO_Timeout. Netzwerkprogrammierung 3
G Timeout bei UNC-Pfaden Netzwerkprogrammierung 2
DEvent Socket und Timeout Netzwerkprogrammierung 3
T Timeout eines KSOAP-Calls Netzwerkprogrammierung 5
E Möglichkeit zum Timeout eines Process Netzwerkprogrammierung 7
P Socket Timeout ? Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben