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

时间:2013-09-25 16:44:48

标签: java sockets networking

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

2 个答案:

答案 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)

没有。 server.accept()是一种阻塞方法,它会等待。

来自javadoc

  

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