Java 如何使用socket.setSoTimeout()?
使用Java 如何使用socket.setSoTimeout()?,java,sockets,Java,Sockets,使用socket.seSoTimeout(5000)在套接字上设置超时时套接字是关闭还是在超时后停止侦听?我必须再次打开插座才能继续收听,还是它会自动打开 receivingSocket.setSoTimeout(5000); // set timer try{ receivingSocket.receive(packet); } catch(SocketTimeoutException e){ System.out.println("### Timed out after 5 seco
socket.seSoTimeout(5000)在套接字上设置超时时代码>套接字是关闭还是在超时后停止侦听?我必须再次打开插座才能继续收听,还是它会自动打开
receivingSocket.setSoTimeout(5000); // set timer
try{
receivingSocket.receive(packet);
}
catch(SocketTimeoutException e){
System.out.println("### Timed out after 5 seconds.");
}
//will I have to reopen the socket here?
您可以通过将try/catch包装在while(true)
中来测试您的问题。简短的回答是否,您不必重新打开套接字。setSoTimeout()
只是告诉套接字在您尝试执行任何其他操作之前等待数据这么长时间
byte[] buffer = new byte[1000];
DatagramPacket p = new DatagramPacket(buffer, buffer.length);
DatagramSocket receiveSocket = new DatagramSocket(5505, InetAddress.getByName("127.0.0.1"));
receiveSocket.setSoTimeout(5000);
while (true) {
try {
receiveSocket.receive(p);
} catch (SocketTimeoutException ste) {
System.out.println("### Timed out after 5 seconds");
}
}
结果(您可以看到套接字超时后仍然可以重用):
如州政府所述:
如果超时过期,将引发java.net.SocketTimeoutException,尽管ServerSocket仍然有效
所以不,它不会关闭插座。下次当你想知道一些东西是如何工作的时候,请查看文档好的,哇,谢谢。没想到这么简单。我想我是想得太多了。本质上,它在等待“receivesocket.receive(p);”去拿包。现在说得通了,那是错误的。问题不在于ServerSockets
。