DatagramSocket没有抛出SocketTimeout - Java

时间:2012-12-12 03:24:01

标签: java sockets datagram

我的数据报套接字没有抛出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) {}
}

2 个答案:

答案 0 :(得分:0)

来自javadocs

  

如果超时到期,则引发java.net.SocketTimeoutException,尽管DatagramSocket是   还是有效。 必须在进入阻止操作之前启用该选项才能生效。   超时必须> 0.超时为零被解释为无限超时。

检查是否正确启用了超时,如上面引用中所示。

此外,稍后检查getSoTimeout()的值,以验证它是什么。

答案 1 :(得分:0)

对此DatagramSocket的receive()调用将仅阻止setsockettimeout的时间量。如果超时到期,则引发java.net.SocketTimeoutException,尽管DatagramSocket仍然有效。这里200毫秒被设置为超时,它应该工作。

您正在尝试哪种环境?这可能是Windows上的预期行为,因为SocketException在solaris / Linux环境中正常运行。