Сколько времени java.net.DatagramSocket будет ожидать запроса клиента, если он неактивен в течение длительного времени?
У меня возникают проблемы при использовании пакета дейтаграммы 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 ответа
Решение
Следующий оператор изменяет поведение сокета при получении - если в течение 60 секунд не поступает датаграмма, генерируется исключение SocketTimeoutException.
socket.setSoTimeout(60000);
Может быть, я неправильно понял ваш вопрос.
Тебе придется найти это исключение. Если вы не установите тайм-аут чтения, метод чтения будет заблокирован навсегда.