Я отправил пакет Udp на сервер. Если сервер в порядке, я могу получить пакет ответа, но когда сервер не работает, я не получил никакого пакета ответа. Кто-нибудь может помочь мне, как я могу отправить свой пакет на сервер несколько раз, когда не удается получить ответный пакет. Кроме того, вы хотите сохранить соединение с сервером. Заранее спасибо.
Как отправить пакет Udp 2 или 3 раза после неудачного получения пакета в java?
Ответы (1)
Хорошо,
После того, как вы отправили пакет, вы ждете пакет ACK (ответ) от сервера. Вы можете использовать DatagramSocket.setSoTimeout() в соответствующее время, если вы получите исключение Timeout Exception, увеличивающее счетчик, если этот счетчик меньше 2/3, отправьте пакет еще раз и повторите эти шаги. Если счетчик больше 2/3, сервер не работает, просто выйдите.
В соответствии с документацией Java получение будет блокироваться до тех пор, пока не будет получен пакет или не истечет время ожидания.
Чтобы поддерживать связь, вам нужно реализовать пинг-понг. В другом потоке вашей программы вы отправляете пакет Keep-Alive (подойдет любой небольшой пакет) и ждете ответа. Я предлагаю использовать для этой цели другой номер порта, чтобы эти пакеты не путались с обычными пакетами данных. Эти пакеты можно отправлять каждые 2 секунды или 2 минуты, в зависимости от ваших конкретных потребностей. Когда поток получает пакет ACK, он обновляет частную переменную времени текущим временем, например:
lastTimeSeen = System.currentTimeMillis();
поместите метод в свой класс потока для доступа к значению этой переменной.