Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Listenden socket schließen

Empfohlene Antworten

Veröffentlicht

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

Hmmm schon mal versucht den Thread mit nem interrupt zu unterbrechen?

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.

Wenn ich den blockierten Thread per Interrupt stöhre, kann ich auch den Socket schließen.

ich bin blöd und das ist gut so

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.

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

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?

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.