Java Sockets - 如果没有客户端尝试连接,则跳过 SocketServeraccept() 方法

标签 java serversocket

我有一个运行良好的小型客户端服务器程序。但是,我的服务器在这行代码处停止循环: 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()

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

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

最佳答案

服务器的工作方式就是这样的。接受之后发生的事情应该处理一个特定的传入连接,例如解析响应,或者为要响应的连接生成一个新线程,或者将其委托(delegate)给 ThreadPool 工作线程来执行响应,然后循环到等待另一个连接进入。

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

关于Java Sockets - 如果没有客户端尝试连接,则跳过 SocketServeraccept() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49834605/

相关文章:

c++ - 怎么才能一直开服务器呢?

Java ServerSocket和Socket实现IM系统

java - 服务器套接字未监听正确的 IP 地址

java - 在 Intellij 中,如何安全地重构循环中的 continue 语句?

c# - 如何在 C# 中获取 tcp 客户端 ip 和端口并显示?

python - 如何触发 "except"?

java - 通用接口(interface)

java - Wiremock - "URL does not match",即使它是相同的

java - java中的异步处理

java - 如何导入java类?