我的数据报套接字没有抛出SocketTimeout,尽管它被设置了,我不知道如何解决这个问题。代码如下。问题是,如果它没有在此套接字连接上收到任何消息,它将在第一次运行时超时。但是,它成功接收了几次消息,稍后在调用.receive时不会超时。
DatagramSocket serverSocket = new DatagramSocket(serverSyncPort);
serverSocket.setSoTimeout(200);
while(true)
{
receiveData = new byte[1024];
receivePacket = new DatagramPacket(receiveData,receiveData.length);
try
{
serverSocket.receive(receivePacket);
}
catch(SocketTimeoutException e) {}
}
答案 0 :(得分:0)
来自javadocs
如果超时到期,则引发java.net.SocketTimeoutException,尽管DatagramSocket是 还是有效。 必须在进入阻止操作之前启用该选项才能生效。 超时必须> 0.超时为零被解释为无限超时。
检查是否正确启用了超时,如上面引用中所示。
此外,稍后检查getSoTimeout()
的值,以验证它是什么。
答案 1 :(得分:0)
对此DatagramSocket的receive()调用将仅阻止setsockettimeout的时间量。如果超时到期,则引发java.net.SocketTimeoutException,尽管DatagramSocket仍然有效。这里200毫秒被设置为超时,它应该工作。
您正在尝试哪种环境?这可能是Windows上的预期行为,因为SocketException在solaris / Linux环境中正常运行。