# server mit endlosse schleife beenden



## youssef (20. Jan 2005)

hallo zusammen
ich habe in eine client-server applikation einen frame für den server mit zwei buttons "server starten und "server stoppen".
in den server wird einen thread gestartet, der die daten von client empfängt.
beim drücken den button "server stoppen" unterbreche ich den thread mit interuppt und in run vom thread frage ich ab.


```
public void run()

{
    try 
      {
         while (true) {

                              if (isInterrupted())
		 break;

                              Socket so = serversocket.accept();
	              OutputStream out = so.getOutputStream();
	              // daten empfangen und weiter verarbeiten
                              so.close();
                          }				
  							}
      }
      catch (IOException e)
     {
           System.err.println(e.toString());
           System.exit(1);
     }
}
```

nach starten der server ohne den client zu starten bleibt der server in accept() hängen (es ist auch so gewollt). nach  drücken den button "server stoppen" tut das programm nichts und wird nicht unterbrochen.
ich habe den timeout gesetzt aber nach ende der zeit bricht er ab mit einer exception(unsauber). 
weiss jemand wie man den server sauber benden kann also thread beenden und serversocket schliessen und alle nötige arbeit.

danke im voraus
Youssef


----------



## stev.glasow (20. Jan 2005)

Ne die Exception ist nicht unsauber, einfach die SocketTimeoutException abfangen und ins catch ein continue


----------



## foobar (20. Jan 2005)

Warum so umständlich?


```
public void run()
{
    try
      {
         while ( ! isInterrupted() ) {
                 Socket so = serversocket.accept();
                 OutputStream out = so.getOutputStream();
                 // daten empfangen und weiter verarbeiten
                              so.close();
           }            
      }
      catch (IOException e)
     {
           System.err.println(e.toString());
           System.exit(1);
     }
}
```


----------



## stev.glasow (20. Jan 2005)

Weil das so nicht geht 
Denn so hängt er in der serversocket.accept(); fest wenn er keine Connetions bekommt bzw. beendet gleich alles sobald eine SocketTimeoutException  geworfen wird, was nicht Sinn der Sache ist.


----------



## meez (20. Jan 2005)

Oder mach halt schnell einen Lokalen Socket auf deinen Server auf...


----------



## youssef (20. Jan 2005)

hallo stevg,

vielen dank für deine hilfe. es funktioniert !
habe vorher schon mit exception ausprobiert aber bin nicht auf continue drauf gekommen. manchmal kann man kompiliziert erscheinende  probleme nur mit einfachen dingen lösen.

gruss
youssef


----------



## citizen_erased (20. Jan 2005)

trenne das doch.
dein server verfügt dann über einen thread, der auf die clients wartet. eben .- weil accept() eine blockierende methoden ist.

wird der server gestoppt, wird das dann (wie oben) nicht erst dann bemerkbar, wenn accept() abgearbeitet wurde (da sich endlich ein client an den port anmeldete)


----------

