Zum Inhalt springen

Listenden socket schließen


jghj

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...