Сокет UDP и несколько ответов

Я учусь, поэтому, пожалуйста, будьте терпеливы и ясны. Я пишу эхо-клиент с сокетами Java (DatagramSocket).

После того, как клиент отправляет сообщение на эхо-сервер, сервер намеренно отправляет 1-10 копий сообщения обратно, чтобы имитировать дублирование сообщения в UDP.

Однако мой код может получить только первое из этих сообщений, отправленных обратно, а не полный номер, отправленный сервером. Мой код получения выглядит следующим образом:

socket.receive(receivePacket);

Как бы я поставил своего клиента в состояние, когда вы можете ввести строку для эха, сказать «Привет», затем она отправляется на сервер, но затем может получать все ответы? Я предполагаю, что все они возвращаются к клиенту (я тестирую это на своей локальной машине, поэтому потерь не будет)


person xingyu    schedule 01.04.2012    source источник


Ответы (1)


Вызовите socket.receive снова, чтобы получить дополнительные пакеты. Установить время ожидания подождать разумное количество времени, прежде чем решить, что сервер отправил все свои пакеты.

person selbie    schedule 01.04.2012
comment
Привет... поэтому я бы сначала установил тайм-аут сокета на 1000 мс, затем отправил сообщение через этот сокет, а затем сказал, что введите цикл while (true), который вызывает socket.receive (...) до тех пор, пока не будет выбрано исключение SocketTimeoutException. .. это максимальное временное окно, в течение которого ответы могут быть доставлены клиенту. Звучит разумно? - person xingyu; 01.04.2012
comment
Да. Вы можете рассмотреть возможность установки тайм-аута после отправки исходного сообщения. Я бы предложил подождать, возможно, до 3-5 секунд для первого ответа (особенно если вы делаете это через Интернет), а затем изменить время ожидания обратно на 1 секунду, чтобы использовать дубликаты. - person selbie; 01.04.2012