当没有形成新套接字时,即没有建立新连接时,server.accept()
方法返回什么? sever.accept()
等待新连接时是否可以转到下一行代码?
答案 0 :(得分:0)
如果您想在服务器等待连接时执行某些操作,则可以使用多个线程。在单线程应用程序中,您无法调用函数并继续工作而无需等待它返回:要么您正在等待服务器接受连接,要么您正在进行其他计算。
线程的一种可能替代方法是在服务器套接字上设置the SO_TIMEOUT
socket option。这使得对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
类。这是以这种方式编写的 example of a non-blocking socket server。
答案 1 :(得分:0)