gpt4 book ai didi

java - 如何使用 socket.setSoTimeout()?

转载 作者:行者123 更新时间:2023-11-30 08:53:14 24 4
gpt4 key购买 nike

当您使用 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");
}
}

结果(可以看到socket超时后仍然可以复用):

enter image description here

关于java - 如何使用 socket.setSoTimeout()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29848713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com