java - 我的 serverSocket 中仅获取一个客户端

标签 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 和主机名,但是,如果我启动另一个客户端,它不会监听它。

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

最佳答案

您必须将线程放入 while 循环中,如果没有它,在创建一个连接后代码就会完成并停止。

关于java - 我的 serverSocket 中仅获取一个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30604467/

相关文章:

java - Jhipster 返回 org.hibernate.StaleStateException : Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

sockets - Chrome 挂起 "sending request"似乎与套接字有关

sockets - 无限循环监听套接字

java - 为什么在静态上下文中访问实例化字段比在 JAVA 中访问实例化上下文更快

java - 桌面 webkit 相当于 Android 的 addJavascriptInterface()?

python发送http响应

cocoa - EXC_BAD_指令: task_thread failed cocoa

java - 从客户端发送多个服务器对象到服务器

java - 聊天服务器 : Print chat history java

java - 为什么我的@singleton 不起作用?