«ipAddr.ScopeId» выдал исключение типа «System.Net.Sockets.SocketException» - PullRequest
2 голосов
/ 17 февраля 2012

enter image description here enter image description here

string ipAddress = "a.b.c.d";
IPAddress ipAddr = IPAddress.Parse(ipAddress);
IPEndPoint endPoint = new IPEndPoint(ipAddr, port);
EndPoint remote = (EndPoint)endPoint;
socket.ReceiveFrom(data, ref remote);

У меня периодически возникает проблема, когда я пытаюсь прочитать данные из UDP-сокета. Я говорю ему, с какого IP-адреса и порта я хочу прочитать - редко, с этого получен пакет с другого IP-адреса?

Исключение в режиме без вывода сообщений (когда я наведите курсор мыши на ipAddr):

«ipAddr.ScopeId» вызвал исключение типа «System.Net.Sockets.SocketException»

Если я поймаю это во время отладки и посмотрю на объекты 'endPoint' и 'remote' - конечная точка - это правильный IP-адрес, но IP-адрес удаленного изменился (сам по себе после этого исключения, это НЕ проблема с моей логикой) на фактический ip-адрес, с которого он получен, но не на тот, с которого он запросил!

ReceiveFrom работает в 99% случаев, что означает это исключение, почему Microsoft, почему?

Проблема в том, что как только этот пакет прочитан, он прочитан и не передан туда, куда он должен был идти, как я могу предотвратить это?

edit: scopeID для IPV6, но я не забочусь о ipv6, поэтому, возможно, я смотрю не в том месте, но это по-прежнему не объясняет, почему «конечная точка» неправильно разрешена в «удаленную» (IPEndPoint приведен к абстрактному EndPoint) - 172.50.2.111 не существует и в 99% случаев он истекает, но почему он собирает другие пакеты ?! плачет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...