如何使用socket.setSoTimeout()?
使用socket.seSoTimeout(5000);
在套接字上设置超时时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)
来测试您的问题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仍然有效
所以不,它不会关闭套接字。 下次当您想知道某些工作原理时,请查看文档