Java 套接字 - 如果没有客户端尝试连接,请跳过 SocketServer accept() 方法



我有一个运行良好的小型客户端服务器程序。但是,我的服务器在以下代码行处停止循环: Socket client = server.accept()

我不希望仅仅因为服务器应该处理其他操作而发生这种情况。

下面我将描述我的意思。

public class TimeServer {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(4000);
        final List<Socket> clients = new ArrayList<>();
        while (true) {
            // Some code I need the server to keep on looping on it
            System.out.println("Waiting for connection");
            // accept connection
            Socket client = server.accept();
            System.out.println("Coneccted to: " + client.getPort());
            // assign client to the handler
            TimeHandler handler = new TimeHandler(client);
            Thread t = new Thread(handler);
            t.start();
            clients.add(client);
            System.out.println("Thread id: " + t.getId());
        }
    }
}

如何跳过server.accept()方法?因为程序停止,不断等待来自客户端的连接。此行下面的代码:

Socket client = server.accept()

不会运行,除非,显然,已经建立了连接。

如果这不能发生,或者如果它被认为是一种不好的做法,那么我可以使用什么更好的选择来实现我想要的上面的东西?

服务器的工作方式是这样的。接受后出现的任何内容都应处理一个特定的传入连接,例如解析响应,或生成一个新线程以响应该连接,或者将其欺骗给 ThreadPool 工作线程以执行响应,然后循环等待另一个连接进入。

如果有其他事情要做,您可能会考虑为这些其他事情打开不同的线程。

服务器中与处理传入请求无关的部分不属于该循环。

您应该清楚地区分这些功能 - 设置部分或服务器中不关心单个连接的其他活动:它们都位于代码的不同部分!

最新更新