2013-04-05 5 views
0

Представьте себе следующий сценарий в UDP-пакетов: сообщениеКак Java обрабатывает получение нескольких UDP-пакетов?

  1. вещает сервер "Hello" и ждет ответов
  2. Client 1 ответов с "Привет"
  3. Client 2 также отвечает с "Привет"

Теперь мне интересно, что произойдет с сервером, если второй ответ получен до того, как сервер завершит обработку первого ответа.

С одной стороны, UDP по дизайну ненадежен, и, поскольку я не вызывал datagramSocket.receive(myPacket) во второй раз, я предполагаю, что второй ответ будет отброшен.

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

Что произойдет в этом случае?

ответ

3

Сетевой стек ОС загружает Датаграмму.

Пока сокет остается открытым, дополнительные вызовы .receive() будут отображать содержимое датаграммы.

Если сокет закрыт, а пакеты буферизованы, то они молча отбрасываются.

+0

спасибо! –

Смежные вопросы