Я отправляю многоадресное UDP-сообщение, чтобы найти определенные устройства в сети.Затем я прослушиваю ответ на порт 5001.
Мой рабочий процесс выглядит следующим образом:
- Отправка многоадресного сообщения "поиск" в локальную подсеть.
- Любой wiznet устройства в сети отвечают информационным пакетом, который я хочу получить
Все это прекрасно работает в Windows XP, но в Windows 7 я получаю исключениетипа SocketException: *
Обычно разрешено только одно использование каждого адреса сокета (протокола / сетевого адреса / порта)
Я вижу, что многоадресное сообщение выходит в Wireshark , и я вижу ответ от устройства (устройств), но мой код не отвечает.Мой код выглядит так:
public void StartListen()
{
SendFind();
try {
IPEndPoint localEp = new IPEndPoint(IPAddress.Any, 0);
UdpClient listenClient = new UdpClient(5001);
UdpState s = new UdpState();
s.endpoint = localEp;
s.client = listenClient;
//allow time for the find to work - aka clutching at straws
Thread.Sleep(500);
while (listenClient.Available > 0)
{
listenClient.BeginReceive(ReceiveCallback, s);
Thread.Sleep(500);
}
}
catch (SocketException e)
{
Trace.WriteLine("Could not bind to socket on " + _localPort);
}
listenClient.Close();
}
.. и RecieveCallBack ..
private void ReceiveCallback(IAsyncResult ar)
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).client;
IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).endpoint;
Byte[] receiveBytes = u.EndReceive(ar, ref e);
rxByteList.Add(receiveBytes);
messageRxed = true;
}
** ОБНОВЛЕНИЕ **
Итак, я попробовал различные способы структурирования этогокод.Кажется, что проблема связана с отправкой и получением на разных UdpClients.Мое исключение было вызвано созданием UdpClient для получения сразу после открытия одного для отправки - добавление задержки между отправкой и получением исправило это.
Я изменил свой код, чтобы использовать тот же UdpClient для отправки и получения,но я все еще ничего не получаю на приеме.