只在我的serverSocket中获取一个客户端

时间:2015-06-02 19:02:13

标签: java sockets serversocket

我有一个服务器套接字,我想打开它到多个客户端。 但只有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和主机名,但是,如果我启动另一个客户端,它就不会听它。

我做错了什么?我认为没有必要上传我的客户端代码因为我得到了第一个,所以我认为我做错了。

1 个答案:

答案 0 :(得分:1)

您必须将Thread置于while循环中,在创建一个连接后没有它,代码完成并将停止。