我试图在我的本地网络上进行一些简单的UDP通信.
我想要做的就是对网络上的所有机器进行多播
这是我的发送代码
public void SendMessage(string message) { var data = Encoding.Default.GetBytes(message); using (var udpClient = new UdpClient(AddressFamily.InterNetwork)) { var address = IPAddress.Parse("224.100.0.1"); var ipEndPoint = new IPEndPoint(address, 8088); udpClient.JoinMulticastGroup(address); udpClient.Send(data, data.Length, ipEndPoint); udpClient.Close(); } }
这是我的接收代码
public void Start() { udpClient = new UdpClient(8088); udpClient.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50); receiveThread = new Thread(Receive); receiveThread.Start(); } public void Receive() { while (true) { var ipEndPoint = new IPEndPoint(IPAddress.Any, 0); var data = udpClient.Receive(ref ipEndPoint); Message = Encoding.Default.GetString(data); // Raise the AfterReceive event if (AfterReceive != null) { AfterReceive(this, new EventArgs()); } } }
它在我的本地计算机上运行良好,但不能通过网络运行.
- 似乎不是防火墙.我在两台机器上都禁用了它,但它仍然无效.
- 如果我直接发送到客户端机器的硬编码IP地址(即不是多播),它可以工作.
任何帮助,将不胜感激.
您的本地网络硬件是否支持IGMP?
您的交换机可能是多播感知的,但如果IGMP被禁用,它将不会注意到任何连接的硬件是否订阅了特定的多播组,因此它不会转发这些数据包.
要对此进行测试,请使用交叉电缆将两台机器直接连接在一起.应该(AFAICR)始终有效.
此外,它应该是提供TTL参数的代码的服务器的一半JoinMulticastGroup()
,而不是客户端的一半.