如果长时间不活动,java.net.DatagramSocket 将等待客户端请求多长时间?
how much time java.net.DatagramSocket will wait for a client request if inactive for long time?
我在使用 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();
}
}
你将不得不找到那个例外。除非您设置读取超时,否则读取方法将永远阻塞。
以下语句在接收时更改套接字的行为 - 如果 60 秒内没有数据报到达,则抛出 SocketTimeoutException。
socket.setSoTimeout(60000);
可能是我误解了你的问题。
我在使用 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();
}
}
你将不得不找到那个例外。除非您设置读取超时,否则读取方法将永远阻塞。
以下语句在接收时更改套接字的行为 - 如果 60 秒内没有数据报到达,则抛出 SocketTimeoutException。
socket.setSoTimeout(60000);
可能是我误解了你的问题。