当前位置:  开发笔记 > 编程语言 > 正文

如何在c#中通过本地网络进行UDP组播?

如何解决《如何在c#中通过本地网络进行UDP组播?》经验,为你挑选了1个好方法。

我试图在我的本地网络上进行一些简单的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地址(即不是多播),它可以工作.

任何帮助,将不胜感激.



1> Alnitak..:

您的本地网络硬件是否支持IGMP?

您的交换机可能是多播感知的,但如果IGMP被禁用,它将不会注意到任何连接的硬件是否订阅了特定的多播组,因此它不会转发这些数据包.

要对此进行测试,请使用交叉电缆将两台机器直接连接在一起.应该(AFAICR)始终有效.

此外,它应该是提供TTL参数的代码的服务器的一半JoinMulticastGroup(),而不是客户端的一半.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有