我正在尝试在我的本地网络上进行一些简单的 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)总是有效的。
另外,它应该是server提供了 TTL 参数的代码的一半JoinMulticastGroup()
,不是客户的一半。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)