在等待连接时返回 server.accept() 的值



当没有形成新的套接字时,即没有建立新连接时,server.accept()方法会返回什么?是否可以在sever.accept()等待新连接时转到下一行代码?

如果要在

服务器等待连接时执行某些操作,可以使用多个线程。在单线程应用程序中,您不能调用函数并继续工作而不等待它返回:要么在等待服务器接受连接,要么正在执行其他计算。

线程的可能替代方法是在服务器套接字上设置 SO_TIMEOUT 套接字选项。这使得在超时内未收到连接时对accept的调用将引发异常,从而允许您转到下一行。

例如:

ServerSocket ss = new ServerSocket(8989);
ss.setSoTimeout(10000); // 10 seconds
Socket clientSocket;
try {
    clientSocket = ss.accept();
    // process connection from client
} catch (SocketTimeoutException ste) {
    // connection was not received,
    // do something else
}

另一种选择是使用非阻塞 IO 和 Selector 类。 下面是以这种方式编写的非阻塞套接字服务器的示例。

不,server.accept() 是一个阻塞方法,它会等待。

来自 javadoc

侦听要与此套接字建立的连接并接受它。这 方法块,直到建立连接。

最新更新