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

时间:2018-04-14 18:09:14

标签: java serversocket

我有一个小型的Client Server程序可以正常工作。但是,我的服务器停止在这行代码循环: 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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

您应该明确区分这些功能 - 设置部分或服务器内不关心个别连接的其他活动:它们都在代码的不同部分!