. Net UdpClient Receive - технический вопрос о том, почему он ничего не возвращает - PullRequest
0 голосов
/ 09 января 2020

Я устанавливаю соединение UDP (успешно) с устройством на основе его IP-адреса и порта. Я могу успешно отправлять ему сообщения (закодированные в байтах). Однако я не вижу ответа, возвращенного методом client.Receive ().

Мой технический вопрос связан с этим методом Receive ().

Возможно, мое понимание совершенно неверно, но я представлял, что IP-адрес + порт, который я использовал для подключения к устройству, должен быть одинаковым, когда я вызываю метод Receive ().

Но на примерах это выглядит так это не тот случай.

Может кто-нибудь объяснить мне, почему тот же IP-адрес + порт не используется при вызове Receive ()?

A) Note that i can see a response using a sniffer like Wireshark. But i just dont see the response returning from the C# udpClient.Receive(ref endpoint) method itself.

B) Also, i am using this API document which says that the device (drone) can receive and send a response on the same IPAddress + port.

1 Ответ

0 голосов
/ 09 января 2020

UDP-пакеты не имеют состояния, на самом деле соединения нет. В отличие от потоков TCP, метод connect не запускает никаких сетевых пакетов. Все, что он делает, это предоставляет адрес по умолчанию, поэтому вам не нужно указывать его при отправке новых пакетов. И настройте фильтр пакетов так, чтобы будут приниматься только пакеты, которые точно соответствуют этому удаленному адресу (включая номер порта).

Метод приема должен по-прежнему давать вам адрес удаленной конечной точки.

Примечание что если вы не привязали свой UdpClient к определенной c конечной точке, и у машины есть несколько сетевых адресов, ОС может отправить пакет с другого адреса, чем вы ожидаете.

...