RealHAZZARD
Erfahrenes Mitglied
Hallo,
ich habe ein kleines Problem mit meinem Serversocket. Ich habe es eigentlich so gemacht, wie man es in den meisten Beispielen auch findet. Ich initialisiere den Serversocket, dann lasse ich meine Anwendung in einem extra Thread auf einen Clienten warten. Das funktioniert auch bestens, aber mein Problem entsteht beim Beenden der Anwendung. Denn dann wartet der extra Thread in der accept - Methode auf den nächsten Client (ist ja eigentlich auch gut so). Aber irgendwann stellt auch dieser Thread fest, dass der Socket bereits geschlossen ist und bricht mit einer SocketException ab. Genau diesen unkontrollierten Abbruch möchte ich verhindern. Kennt da jemannd eine gute Herangehensweise?
Soweit mein relevanter Code:
Beim Beenden wird einfach nur das Stop - Flag auf true gesetzt und der socket via close() beendet. Mehr mache ich nicht.
ich habe ein kleines Problem mit meinem Serversocket. Ich habe es eigentlich so gemacht, wie man es in den meisten Beispielen auch findet. Ich initialisiere den Serversocket, dann lasse ich meine Anwendung in einem extra Thread auf einen Clienten warten. Das funktioniert auch bestens, aber mein Problem entsteht beim Beenden der Anwendung. Denn dann wartet der extra Thread in der accept - Methode auf den nächsten Client (ist ja eigentlich auch gut so). Aber irgendwann stellt auch dieser Thread fest, dass der Socket bereits geschlossen ist und bricht mit einer SocketException ab. Genau diesen unkontrollierten Abbruch möchte ich verhindern. Kennt da jemannd eine gute Herangehensweise?
Soweit mein relevanter Code:
Java:
private void listen(){
while(!stop){
try{
Socket client = socket.accept(); //Abbruch nach beenden des Sockets
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(client.getOutputStream()));
if(report==null) monitor();
bw.write(report);
bw.close();
client.close();
}catch(IOException ioe){
LoggingManager.getInstance().log(LogLevel.ERROR,ioe);
}
}
Beim Beenden wird einfach nur das Stop - Flag auf true gesetzt und der socket via close() beendet. Mehr mache ich nicht.