Сколько времени 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);

Может быть, я неправильно понял ваш вопрос.

Тебе придется найти это исключение. Если вы не установите тайм-аут чтения, метод чтения будет заблокирован навсегда.

Другие вопросы по тегам