UDP Response - PullRequest
       24

UDP Response

5 голосов
/ 02 декабря 2008

UDP не отправляет подтверждение, но отправит ответ?

Я установил клиент-серверную программу UDP. Если я дам клиенту отправку данных на несуществующий сервер, получит ли клиент какой-либо ответ?

Мое предположение как;

Клиент -> Адрес сервера вещания (ARP) Сервер -> Ответить клиенту с его MAC-адресом (ARP) Клиент отправляет данные на сервер (UDP)

В любом случае Клиент будет получать только ответ ARP. Если сервер существует или нет, он не получит ответ UDP?

Клиент использует функцию sendto для отправки данных. Мы можем получить информацию об ошибке после sendto call.

Так что мой вопрос в том, как эта информация доступна, когда клиент не получает ответа. Код ошибки можно получить из WSAGetLastError.

Я попытался отправить данные на несуществующий хост, и вызов sendto завершился успешно. Согласно документации, он должен завершиться с возвращаемым значением SOCKET_ERROR.

Есть мысли ??

Ответы [ 6 ]

6 голосов
/ 02 декабря 2008

Вы никогда не сможете получить сообщение об ошибке или уведомление о пакете UDP, который не достиг места назначения.

5 голосов
/ 15 сентября 2011

Вызов sendto не прошел. Датаграмма была отправлена ​​в пункт назначения.

Получатель дейтаграммы или какой-либо маршрутизатор на пути к ней может вернуть ответ об ошибке (хост недоступен, порт недоступен, превышен TTL). Но вызов sendto станет историей к тому времени, когда ваша система его получит. Некоторые операционные системы предоставляют способ выяснить, что произошло, часто с помощью вызова getsockopt. Но поскольку вы все равно не можете рассчитывать на получение ответа об ошибке, поскольку это зависит от условий сети, которые вы не можете контролировать, обычно лучше игнорировать это.

Разумные протоколы, наложенные поверх UDP, используют ответы. Если вы не получите ответ, то либо другой конец не получил вашу дейтаграмму, либо ответ не вернул ее вам.

3 голосов
/ 12 июня 2009

Устройство, на которое отправляются пакеты, может ответить сообщением о недоступности порта ICMP UDP.

3 голосов
/ 02 декабря 2008

"UDP - это более простой протокол без установления соединения на основе сообщений. В протоколах без установления соединения не предпринимается никаких усилий для установки выделенного сквозного соединения. Связь достигается путем передачи информации в одном направлении из источника в пункт назначения, не проверяя, находится ли пункт назначения там или он готов к приему информации. "

2 голосов
/ 02 декабря 2008

Протокол UDP реализован поверх IP. Вы отправляете UDP-пакеты хостам, идентифицированным по IP-адресам, а не по MAC-адресам.

И, как указывалось, UDP сам не отправит ответ, вам придется добавить код, чтобы сделать это самостоятельно. Затем вам нужно будет добавить код для ожидания ответа и предпринять соответствующие действия, если ответ потерян (как правило, повторно отправлять по таймеру, пока вы не решите, что другой конец «мертв») и т. Д.

1 голос
/ 12 июня 2009

Если вам нужен надежный UDP, как при заказе или проверке, так что TCP / IP даст вам взглянуть на RUDP или Надежный UDP. Иногда вам требуется проверка, но сочетание надежности UDP и TCP может привести к снижению надежности TCP, что приводит к узким местам.

Для большинства крупномасштабных MMO для isntance UDP и Reliablelity UDP являются средствами связи и надежности. Все, что делает RUDP - это добавляет меньшую часть TCP / IP для проверки и упорядочения определенных сообщений, но не всех.

Распространенной сетевой библиотекой для разработки игр является Raknet, в которую она встроена.

RUDP http://www.javvin.com/protocolRUDP.html

Пример RUDP с использованием Raknet и Python http://pyraknet.slowchop.com/

...