Как отправить пакет Udp 2 или 3 раза после неудачного получения пакета в java?

Я отправил пакет Udp на сервер. Если сервер в порядке, я могу получить пакет ответа, но когда сервер не работает, я не получил никакого пакета ответа. Кто-нибудь может помочь мне, как я могу отправить свой пакет на сервер несколько раз, когда не удается получить ответный пакет. Кроме того, вы хотите сохранить соединение с сервером. Заранее спасибо.


person Tasfin    schedule 16.05.2013    source источник


Ответы (1)


Хорошо,

  1. После того, как вы отправили пакет, вы ждете пакет ACK (ответ) от сервера. Вы можете использовать DatagramSocket.setSoTimeout() в соответствующее время, если вы получите исключение Timeout Exception, увеличивающее счетчик, если этот счетчик меньше 2/3, отправьте пакет еще раз и повторите эти шаги. Если счетчик больше 2/3, сервер не работает, просто выйдите.

    В соответствии с документацией Java получение будет блокироваться до тех пор, пока не будет получен пакет или не истечет время ожидания.

  2. Чтобы поддерживать связь, вам нужно реализовать пинг-понг. В другом потоке вашей программы вы отправляете пакет Keep-Alive (подойдет любой небольшой пакет) и ждете ответа. Я предлагаю использовать для этой цели другой номер порта, чтобы эти пакеты не путались с обычными пакетами данных. Эти пакеты можно отправлять каждые 2 секунды или 2 минуты, в зависимости от ваших конкретных потребностей. Когда поток получает пакет ACK, он обновляет частную переменную времени текущим временем, например:

    lastTimeSeen = System.currentTimeMillis();

    поместите метод в свой класс потока для доступа к значению этой переменной.

person ja_mesa    schedule 16.05.2013