2015-06-02 5 views
1

У меня есть сокет сервера, и я хочу открыть его для нескольких клиентов. , но только получение 1, и если я закрываю этого клиента, им не разрешается больше не обращаться к клиенту.Только один клиент на моем сервере.

Серверный код:

public class Server { 

    public void startServer() { 
     final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);    
     Runnable serverTask = new Runnable() { 
      @Override 
      public void run() { 
       try { 
        InetAddress ip; 
        connect cn = new connect(); 
        ServerSocket serverSocket = new ServerSocket(9239); 
        Socket clientSocket; 
        System.out.println("Waiting for clients to connect..."); 

         clientSocket = serverSocket.accept(); 

         String HostName = ""; 
         String HostIp = ""; 
         String PC = ""; 

         clientProcessingPool.submit(new ClientTask(clientSocket)); 
         HostName = clientSocket.getInetAddress().getHostName(); 
         HostIp = clientSocket.getInetAddress().getHostAddress(); 
         System.out.println(HostName + "/" + HostIp); 

         PC = HostName + "/" + HostIp; 

         cn.insert(PC); 



       } catch (IOException e) { 
        System.err.println("Unable to process client request"); 
        e.printStackTrace(); 
       } catch (ClassNotFoundException ex) { 
        Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
       } catch (SQLException ex) { 
        Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } 
     }; 
     Thread serverThread = new Thread(serverTask); 
     serverThread.start(); 
    } 

    private class ClientTask implements Runnable { 
     private final Socket clientSocket; 

     private ClientTask(Socket clientSocket) { 
     this.clientSocket = clientSocket; 
     } 

     @Override 
     public void run() { 
      System.out.println("Got a client !"); 

      try { 
       clientSocket.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 



} 

Когда им с помощью клиента, им получать IP и имя хоста, но, если я запустить другой клиент, он не будет слушать это.

Что я делаю неправильно? Я думаю, что нет необходимости загружать мой код клиента, потому что я получаю первый, поэтому я думаю, что я делаю что-то неправильно.

+0

Вы должны завернуть вызов 'serverSocket.accept()' в цикле while, чтобы он мог принимать несколько клиентов. –

ответ

1

Вы должны поместить Thread в цикл while, без него после создания одного соединения код будет завершен и остановится.

Смежные вопросы