如果长时间不活动,java.net.DatagramSocket将等待多长时间的客户端请求?

时间:2015-09-23 06:36:38

标签: java sockets client-server datagram

我在使用UDP数据报包时遇到问题,在程序中我绑定了UDP端口并在其上侦听消息。这通常可以正常工作,但如果端口长时间保持空闲状态,程序会自动终止UDP套接字。不幸的是,日志文件很大,很难找到异常。请帮我找到一种永远保持UDP端口存活的方法。提前谢谢。

这是我的代码:

socket = new DatagramSocket(port);
setBindSocket(true);            
socket.setSoTimeout(60000);

while(isBindSocket()) {
    try {               

        byte[] buffur = new byte[512];              
        DatagramPacket inputPacket = new DatagramPacket(buffur, buffur.length);
        inputPacket.setLength(buffur.length);
        socket.receive(inputPacket);
        byte [] bString = inputPacket.getData();
        String hString = new String(bString);        

    } catch (SocketTimeoutException ste) {
    } catch (Exception e) { 
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:1)

以下语句在接收时更改套接字的行为 - 如果没有数据报在60秒内到达,则抛出SocketTimeoutException。

socket.setSoTimeout(60000);

也许我误解了你的问题。

答案 1 :(得分:0)

你将不得不找到那个例外。除非您设置了读取超时,否则read方法将永久阻止。