Socket-Verbindungen
Simon Reinhardt
- java
Hallihallo,
falls hier jemand ist, der sich zufällig mit Sockets in Java auskennen sollte:
Ist es möglich, die Methode accept() aus der Klasse ServerSocket zu unterbrechen?
Z.Z. läuft mein Server so, dass er in einer while-Schleife Clients am ServerSocket entgegennimmt:
while(!closed)
{
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
//Clients in eigenen Thread auslagern
ClientThread ct = new ClientThread(s, distributor);
distributor.add((StreamReceiver)ct);
}
Das Programm wird beendet, indem ich einen quit-Befehl von der Kommandozeile auslese und daraufhin unter anderem closed auf true setze. Das führt hier aber nicht dazu, dass die Schleife abgebrochen wird, da das Programm noch an der Methode accept() hängt und nicht mal einen Schleifendurchlauf beenden kann.
Wie kann ich jetzt diese blockierende Methode killen?
Hilft da nur ein System.exit(0); ?
Hoffe, dass ich hier einen Experten finde :-)
MfG Simon
Hi Simon
Dazu gibt es mehrere möglichkeiten. Ich hab keine bisher verwendet, wäre also gut, wenn du postest, welche (am besten) funktioniert.
1. Einfach den Thread beenden. (Geht ist aber eventuell unsauber, z.B. wenn der Thread Dateien ändert).
2. Das ServerSocket schließen (Bin nicht sicher, ob das geht, so lange noch auf accept() gewartet wird.
3. setSoTimeout(int) Geht auf jeden fall, 2.) wäre aber wohl die schönere Lösung
MfG
Daniel
Hi!
- Einfach den Thread beenden. (Geht ist aber eventuell unsauber, z.B. wenn der Thread Dateien ändert).
Ja, aber die Methode stop() ist ja deprecated.
- Das ServerSocket schließen (Bin nicht sicher, ob das geht, so lange noch auf accept() gewartet wird.
Das hat funktioniert. accept() wirft zwar dann eine SocketException aus, aber die lässt sich ja abfangen.
Bis denne,
Simon