有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果没有客户端尝试连接,serversocket Javasocket将跳过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()

显然,除非建立了连接,否则不会运行

如果这不可能发生,或者这被认为是一种不好的做法,那么我可以用什么更好的选择来实现上述目标


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    服务器的工作方式是这样的。在接受之后,应该处理一个特定的输入连接,例如解析响应,或者为该连接生成一个新线程以进行响应,或者将其删除给线程池工作线程以执行响应,然后循环以等待另一个连接进入

    如果还有其他事情要做,你可能会考虑为其他事情打开不同的线程