2010-05-10 15 views
8

el siguiente código es el código del servidor en mi aplicación:Java Detener servidor de rosca

private int serverPort; 

private Thread serverThread = null; 

public void networkListen(int port){ 

    serverPort = port; 

    if (serverThread == null){ 
     Runnable serverRunnable = new ServerRunnable(); 
     serverThread = new Thread(serverRunnable); 
     serverThread.start(); 
    } else { 

    } 
} 

public class ServerRunnable implements Runnable { 

    public void run(){ 

     try { 

      //networkConnected = false; 
      //netMessage = "Listening for Connection"; 
      //networkMessage = new NetworkMessage(networkConnected, netMessage); 
      //setChanged(); 
      //notifyObservers(networkMessage); 

      ServerSocket serverSocket = new ServerSocket(serverPort, backlog); 

      commSocket = serverSocket.accept(); 

      serverSocket.close(); 
      serverSocket = null; 

      //networkConnected = true; 
      //netMessage = "Connected: " + commSocket.getInetAddress().getHostAddress() + ":" + 
        //commSocket.getPort(); 
      //networkMessage = new NetworkMessage(networkConnected, netMessage); 
      //setChanged(); 
      //notifyObservers(networkMessage); 

     } catch (IOException e){ 

      //networkConnected = false; 
      //netMessage = "ServerRunnable Network Unavailable"; 
      //System.out.println(e.getMessage()); 
      //networkMessage = new NetworkMessage(networkConnected, netMessage); 
      //setChanged(); 
      //notifyObservers(networkMessage); 
     } 
    } 
} 

El código de tipo de obras es decir, si im intentar establecer una conexión recta ambos extremos se comunican y actualización.

El problema es que mientras estoy escuchando una conexión si quiero dejar de escuchar, el hilo del servidor continúa ejecutándose y causa problemas.

Sé que no debería usar .stop() en un hilo así que me preguntaba cómo sería la solución con esto en mente?

EDITAR: se ha comentado el código innecesario.

Respuesta

12

Cierre el socket del servidor desde un hilo externo. De acuerdo con la documentación en Serversocket.close(), la aceptación de bloqueo arrojará una excepción SocketException y puede cerrar su hilo.

6

Después de inicializar su ServerSocket, use setSoTimeout. Ponga el aceptar en un bucle, atrapando los tiempos de espera. Salga del ciclo y regrese desde run en función de si desea continuar o no.

+0

Muchas gracias por "Break from the loop": ¡es la clave! – Kirzilla

Cuestiones relacionadas