jghj Geschrieben 1. Mai 2006 Geschrieben 1. Mai 2006 Hallo erstmal. ich lausche in meinem Porgramm an einem Socket und warte auf input. (Damit freezed der thread is ja klar) Das sieht in etwa so aus: BufferedReader in = new BufferedReader( new InputStreamReader( sock.getInputStream() ) ); String line = null; while( listen ) { line = in.readLine(); if( line == null ) { break ; } /* ... */ } Ich kann ihm den socket leider nicht unterm ***** wegziehen. Gibts ne möglichkeit, dass der bei readLine() nen timeout von z.B. 3 sekunden hat, und dann eben checkt ob listen noch true is oder so was ähnliches? Danke im voraus mfg jghj Zitieren
Sigi Geschrieben 2. Mai 2006 Geschrieben 2. Mai 2006 Hmmm schon mal versucht den Thread mit nem interrupt zu unterbrechen? Zitieren
perdian Geschrieben 2. Mai 2006 Geschrieben 2. Mai 2006 schon mal versucht den Thread mit nem interrupt zu unterbrechen?Und was bringt das? Damit wäre dann der Socket noch immer nicht geschlossen. Es gehört auch noch eine entsprechende Interrupt Behandlung dazu. Einen Timeout gibt es beim Auslesen eines Streams nicht, es bleibt nur die Möglichkeit eines Watcher-Threads von aussen, der nach einer gewissen Zeit den Socket schließt. Zitieren
Sigi Geschrieben 2. Mai 2006 Geschrieben 2. Mai 2006 Wenn ich den blockierten Thread per Interrupt stöhre, kann ich auch den Socket schließen. Zitieren
MikeVader Geschrieben 2. Mai 2006 Geschrieben 2. Mai 2006 Es gibt die Möglichkeit mit Channels zu arbeiten. Das ist u.a. eine Socket-Variante die mit java.nio gekommen ist (non-blocking I/O). Dort gibt es zwar auch kein Timeout, aber man liesst nur gerade die Daten vom Socket die gerade vorhanden sind und wird nicht blockiert (auch keine Daten sind ein gültiges Resultat und bedeutet nicht, dass die Verbindung beendet ist). Dies bedeutet jedoch, dass man selber für das korrekte zusammenhängen der Daten verantwortlich ist. Zitieren
Jaraz Geschrieben 2. Mai 2006 Geschrieben 2. Mai 2006 Hi, erkläre doch mal was du genau machen willst, vielleicht gibt es eine eine andere Möglichkeit als direkt einen Socket zu benutzen und von Hand den Thread zu steuern. Gruß Jaraz Zitieren
jghj Geschrieben 4. Mai 2006 Autor Geschrieben 4. Mai 2006 eine erklärung was ich machen will: ich hab einen stink normalen server programmiert, der für jede connection ein eigenen thread aufmacht. Da gibts dann wie im irc protokoll PING und PONG events. Wenn der client innerhalb eines bestimmten zeitraums nicht gepongt hat soll der server den thread schließen. das ping pong event läuft aber wieder in einem anderen thread, da das ja für alle connections zuständig ist. Jetzt muss diese klasse die connection und den thread beenden können. Wie mache ich das mit diesem Watcher thread @perdi? Zitieren
perdian Geschrieben 7. Mai 2006 Geschrieben 7. Mai 2006 Wie mache ich das mit diesem Watcher thread?Um es mal sehr einfach darzustellen: Alle erzeugten Threads werden in einem Lookup gehalten und bekommen jeweils einen Timestamp verpasst, wann die letzte Aktion durchgeführt worden ist. Ein Watcher-Thread läuft alle X Sekunden dieses Lookup durch, checkt ob letzter Zugriff >= maxAge und führt bei Bedarf dann ein Cleanup durch. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.