如何在c#中通过本地网络进行UDP多播?我正在尝试在我的本地网络上进行一些简单的UDP通信。我想要做的就是向网络上的所有机器组播这里是我的发送代码使用(varudpClient=newUdpClient(AddressFamily.InterNetwork)){varaddress=IPAddress.Parse("224.100.0.1");varipEndPoint=newIPEndPoint(地址,8088);udpClient.JoinMulticastGroup(地址);udpClient.Send(数据,数据长度,ipEndPoint);udpClient.Close();}}这是我的接收代码publicvoidStart(){udpClient=newUdpClient(8088);udpClient.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"),50);receiveThread=新线程(接收);receiveThread.Start();}publicvoidReceive(){while(true){varipEndPoint=newIPEndPoint(IPAddress.Any,0);vardata=udpClient.Receive(refipEndPoint);消息=编码。默认.GetString(数据);//引发AfterReceive事件if(AfterReceive!=null){AfterReceive(this,newEventArgs());它在我的本地计算机上完美运行,但在网络上运行不佳。-似乎不是防火墙。我在两台机器上都禁用了它,但它仍然不起作用。-如果我直接发送到客户端机器的硬编码IP地址(即不多播),它就可以工作。任何帮助将不胜感激。您的本地网络硬件是否支持IGMP?您的交换机可能支持多播,但如果IGMP被禁用,它不会注意到任何连接的硬件是否订阅了特定的多播组,因此它不会转发这些数据包。要对此进行测试,请使用交叉电缆将两台机器直接连接在一起。应该(AFAICR)总是有效。此外,它应该是向JoinMulticastGroup()提供TTL参数的服务器代码的一半,而不是客户端的一半。我只是在类似的事情上花了4个小时(我认为),我的解决方案是:client.Client.Bind(newIPEndPoint(IPAddress.Any,SSDP_PORT));client.JoinMulticastGroup(SSDP_IP,IP.ExternalIPAddresses.First());client.MulticastLoopback=true;在多播组上使用特定(第一个外部)IP地址。我没有在代码中的任何地方看到指定的TTL。记得TTL原来是以秒为单位的,后来变成了跳数的单位。这意味着通过使用智能TTL,您可以避免通过路由器。我机器上的默认TTL是32——我认为这应该足够了;但是,如果您的系统已被任何形式的安全措施(UdpClient.Ttl)锁定,您的实际情况可能会有所不同。我无法推荐您需要哪种TTL-因为我个人需要做很多实验。如果这不起作用,您可以看看这些文章:总而言之,使用套接字代替UdpClients似乎取得了成功。您选择的多播组也可以是仅限本地的。试试另一个。您的物理网络层也可能导致问题。我会冒险质疑开关和直接(x-over)连接。集线器和所有更聪明的人都应该处理它们。但是,我没有任何文献来支持它。以上是C#学习教程:HowtoperformUDPmulticastoverthelocalnetworkinc#?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
