C # UDP Сокет, требующий времени для отправки данных на неизвестный IP - PullRequest
1 голос
/ 31 декабря 2010

Я отправляю данные в сокет UDP, используя этот код

Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(obj.destAddress), obj.destPort);

byte[] buf = new byte[obj.length];
Array.Copy((byte[])obj.data, buf, obj.length);
int n = udpClient.SendTo(buf, ipEndPoint);
udpClient.Close();

этот код работает нормально, если в текущей сети существует IP, но при отправке данных на неизвестный IP-адрес требуется 3-5 секунд. Это приводит к зависанию основного приложения на 3-5 секунд. В чем может быть причина этой проблемы ...

1 Ответ

2 голосов
/ 31 декабря 2010

Ваш стек IP не может отправлять пакет UDP, пока ему не известен MAC-адрес. Это делается с помощью протокола ARP. Стек IP отправляет запрос ARP и время ожидания ожидания ответа ARP. После завершения SendTo возвращается.

При отправке UDP-пакета в Интернет необходим MAC-адрес шлюза. Поскольку шлюз обычно доступен, тайм-аут не отображается, поскольку ваш стек IP мог отправлять шлюз независимо от того, доступен ли пункт назначения.

Вы можете попытаться установить опцию сокета для асинхронной работы.

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