C# UDP多播未接收数据

C# UDP多播未接收数据,c#,.net-core,udp,multicast,C#,.net Core,Udp,Multicast,我正在尝试编写一个简单的客户端来接收多播数据。我尝试了许多不同的迭代,但都没有成功。我使用的环境是.netcore 2.2.2,并且是linux环境。我可以看到数据正通过tcpdump发送到正确的接口,但我的客户端总是在接收时卡住。我还有一个程序,是由以前的一位开发人员用Java编写的,它可以正确地从下面的接口接收数据,因此我可以确认路由确实有效 尝试#1 尝试#2 任何帮助都将不胜感激 使用以下代码修复 try { mcastSocket = new Socket(AddressFam

我正在尝试编写一个简单的客户端来接收多播数据。我尝试了许多不同的迭代,但都没有成功。我使用的环境是.netcore 2.2.2,并且是linux环境。我可以看到数据正通过tcpdump发送到正确的接口,但我的客户端总是在接收时卡住。我还有一个程序,是由以前的一位开发人员用Java编写的,它可以正确地从下面的接口接收数据,因此我可以确认路由确实有效

尝试#1

尝试#2

任何帮助都将不胜感激

使用以下代码修复

try
{
    mcastSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

    IPAddress localIPAddr = IPAddress.Parse("10.51.254.2");                
    IPEndPoint localEP = new IPEndPoint(IPAddress.Any, mcastPort);          
    mcastSocket.Bind(localEP);

    MulticastOption option = new MulticastOption(mcastAddress, localIPAddr);              
    mcastSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, option);

    EndPoint remoteEp = new IPEndPoint(localIPAddr, mcastPort);

    byte[] arr = new byte[4096];

    while (true)
    {
        var receivedBytes = mcastSocket.ReceiveFrom(arr, ref remoteEp);
                    Console.WriteLine($"Got data {receivedBytes}");
    }
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

参见msdn示例。我将使用注释掉的代码作为本地IP地址:IPAddress localIP=IPAddress.Any;这里是指向msdn页面的链接:#1中的代码取自您使用localIP=IPAddress.Any在示例1中使用“224.0.31.130”链接try的示例。就是这样。天哪,真是松了一口气。我将更新代码示例以反映工作代码。THANKS@jdweng知道为什么IPEndPoint localEP=new IPEndPoint(localIPAddr,McAsport)不起作用并将其更改为IPAddress吗?有没有解决问题的方法?
UdpClient client = new UdpClient();

client.ExclusiveAddressUse = false;
IPEndPoint localEp = new IPEndPoint(IPAddress.Parse("10.51.254.2"), 14382);

client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
client.ExclusiveAddressUse = false;

client.Client.Bind(localEp);            
client.JoinMulticastGroup(IPAddress.Parse("224.0.31.130"), IPAddress.Parse("10.51.254.2"));

Console.WriteLine("Listening this will never quit so you will need to ctrl-c it");
IPEndPoint remoteEp = new IPEndPoint(IPAddress.Parse("224.0.31.130"), 14382);
EndPoint remoteEndPoint = (EndPoint) new IPEndPoint(IPAddress.Any, 0);
while (true)
{
    Byte[] data = client.Receive(ref remoteEndPoint);                
    Console.WriteLine("got data");
}
try
{
    mcastSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

    IPAddress localIPAddr = IPAddress.Parse("10.51.254.2");                
    IPEndPoint localEP = new IPEndPoint(IPAddress.Any, mcastPort);          
    mcastSocket.Bind(localEP);

    MulticastOption option = new MulticastOption(mcastAddress, localIPAddr);              
    mcastSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, option);

    EndPoint remoteEp = new IPEndPoint(localIPAddr, mcastPort);

    byte[] arr = new byte[4096];

    while (true)
    {
        var receivedBytes = mcastSocket.ReceiveFrom(arr, ref remoteEp);
                    Console.WriteLine($"Got data {receivedBytes}");
    }
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}