0

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

4

2 回答 2

0

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

线程的一种可能替代方法是在服务器套接字上设置套接字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类。这是以这种方式编写的非阻塞套接字服务器的示例。

于 2013-09-25T16:50:52.197 回答
0

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

来自javadoc

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

于 2013-09-25T16:51:38.700 回答