Veröffentlicht 1. Mai 200619 j 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
2. Mai 200619 j 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.
2. Mai 200619 j Wenn ich den blockierten Thread per Interrupt stöhre, kann ich auch den Socket schließen.
2. Mai 200619 j 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.
2. Mai 200619 j 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
4. Mai 200619 j 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?
7. Mai 200619 j 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.