Использование udpclient с несколькими сетевыми адаптерами
Я использую
UdpClient
который прекрасно работает с одним адаптером, но на машине с установленным hyper-v (несколькими виртуальными адаптерами) код не получает ответа.Кто-нибудь сталкивался с этим и обходным путем?
Что я уже пробовал:
private string DoUDPSearch(int port) { var host = Dns.GetHostEntry(Dns.GetHostName()); string ipaddr = ""; foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { try { var Client = new UdpClient(); Client.Client.SendTimeout = 2000; Client.Client.ReceiveTimeout = 2000; var RequestData = Encoding.ASCII.GetBytes("SomeRequestData"); var ServerEp = new IPEndPoint(ip, 0); Client.EnableBroadcast = true; Client.Send(RequestData, RequestData.Length, new IPEndPoint(IPAddress.Broadcast, port)); var ServerResponseData = Client.Receive(ref ServerEp); var ServerResponse = Encoding.ASCII.GetString(ServerResponseData); //Console.WriteLine("Recieved {0} from {1}", ServerResponse, ServerEp.Address.ToString()); ipaddr = ServerEp.Address.ToString(); logger("Server IP = " + ServerEp.Address); Client.Close(); return ipaddr; } catch { Console.WriteLine("unable to connect."); } } } logger("Server IP not found."); return ipaddr; }
Afzaal Ahmad Zeeshan
Протокол UDP сам по себе не гарантирует никакого ответа или доставки. Это работа TCP. Работает ли TCP нормально в этом случае, так как я не работал в виртуализированной системе адаптеров?
Я работал с "TCP или UDP case" 2 года назад и оставил его использование в пользу TCP. UDP имеет тенденцию быть быстрым,поэтому он продолжает отбрасывать все.
В любом случае, взгляните на эта тема.
Richard MacCutchan
Вы уверены, что у вас есть сетевые пути между всеми узлами? Получали ли удаленные устройства широковещательные сообщения?
Mehdi Gholam
Нашел проблему с большим количеством возни... (ви-Хи!!), см. Решение 2