Невозможно отладить получение клиента UDPclient

Я хочу получать пакеты с указанного ниже IP-адреса, используя следующий порт. Проблема заключается в том, что после "client.Receive(ref localEp);" этой строки код не запускается, а также не может отлаживаться.

UdpClient client = new UdpClient();

IPEndPoint localEp = new IPEndPoint(IPAddress.Any, 17000);
client.Client.Bind(localEp);

IPAddress multicastaddress = IPAddress.Parse("224.0.0.10");
client.JoinMulticastGroup(multicastaddress);

while (true)
{
     Byte[] data = client.Receive(ref localEp);
     string strData = Encoding.UTF8.GetString(data);
     Console.WriteLine(strData);
}

Я также получаю это исключение ScopeId = 'localEp.Address.ScopeId' вызвало исключение типа 'System.Net.Sockets.SocketException' в IPEndPoint localEp. Пожалуйста, помогите исправить мой код

ОБНОВЛЕНИЕ Решение в том, что на моей машине установлена ​​виртуальная машина HYPER-V, которая ограничивает получение данных udp. Я просто отключил его и начал получать данные. Честно говоря, я понятия не имею о его поведении.


person Hafiz H    schedule 15.09.2016    source источник
comment
возможно проблема с портом 17000. попробуй другие порты.   -  person Zag Gol    schedule 15.09.2016
comment
Я проверил с некоторыми другими значениями и значением по умолчанию 0, та же проблема! :(   -  person Hafiz H    schedule 15.09.2016


Ответы (1)


Сначала попробуйте msdn способ получения данных из любого источника с локального хоста, а затем с другого имени хоста:

https://msdn.microsoft.com/en-us/library/system.net.sockets.udpclient(v=vs.110).aspx

// This constructor arbitrarily assigns the local port number.
    UdpClient udpClient = new UdpClient(17000);

    udpClient.Connect("127.0.0.1", 17000);

    // Sends a message to the host to which you have connected.
    Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there?");

    udpClient.Send(sendBytes, sendBytes.Length);

    //// Sends a message to a different host using optional hostname and port parameters.
    //UdpClient udpClientB = new UdpClient();
    //udpClientB.Send(sendBytes, sendBytes.Length, "AlternateHostMachineName", 17000);

    //IPEndPoint object will allow us to read datagrams sent from any source.
    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);

    // Blocks until a message returns on this socket from a remote host.
    Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
    string returnData = Encoding.ASCII.GetString(receiveBytes);
person Zag Gol    schedule 15.09.2016
comment
С локальным хостом работает нормально. Я предполагаю, что проблема с сервером, который не отправляет никаких данных. ТС, спасибо за ответ - person Hafiz H; 15.09.2016
comment
UDP имеет риски безопасности. поиск google с «угрозами безопасности». брандмауэр может заблокировать его. - person Zag Gol; 28.09.2016
comment
Правильно, я также добавил некоторые входящие правила в брандмауэре для UDP-соединения, чтобы оно работало. - person Hafiz H; 28.09.2016