gpt4 book ai didi

c# - 如何在 c# 中跨本地网络进行 UDP 多播?

转载 作者:可可西里 更新时间:2023-11-01 09:09:42 27 4
gpt4 key购买 nike

我正在尝试在我的本地网络上进行一些简单的 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(),而不是客户端的一半。

关于c# - 如何在 c# 中跨本地网络进行 UDP 多播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/767215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com