C#中UDP组播,局域网内,经过两层路由后, 收不倒信息是什么原因?

时间:2021-05-28 18:54:48
1.C#中UDP组播,局域网内,经过两层路由后, 收不倒信息是什么原因?
2.经过一个路由器是可以的。

14 个解决方案

#1


这里没有砖家?

#2


这里没有砖家,有攻城使。

#3


有个路由器不支持IGMP?你两个路由器换个位置看看

#4


引用 3 楼 hztltgg 的回复:
有个路由器不支持IGMP?你两个路由器换个位置看看

好的,我试一下

#5


引用 2 楼 lei1988 的回复:
这里没有砖家,有攻城使。

有攻城屎,好用也行

#6


一般情况下,UDP组播只在同一个网段内(即子网内),跨越网段组播要有交换机或路由器支持,路由器不支持就没办法了,通常专业交换机和路由器才具备这样的功能

#7


引用 6 楼 jq_whh 的回复:
一般情况下,UDP组播只在同一个网段内(即子网内),跨越网段组播要有交换机或路由器支持,路由器不支持就没办法了,通常专业交换机和路由器才具备这样的功能

是同一个网段,只是其中一个路由器只能接四条线,所以就把其中的一条接出来连到另一个路由器上,再由另一个路由器分出几条线出来

#8


你确定你用的是路由器?而不是交换机或者hub?同一个网段用路由器?

#9


使用的是级联端口吗,级联端口好象也不行

#10


这个不会.

#11


引用 8 楼 hztltgg 的回复:
你确定你用的是路由器?而不是交换机或者hub?同一个网段用路由器?

是路由器,上面有中文写着的“路由器”,我又把程序试了一下,好像通了,能发过去了

#12


通了马上结贴,不过还没怎么搞清楚IGMP,ICMP之类的东西,等后面再不通了,我再开贴,大家等分哦!!!谢谢大家!!!!

#13


附上代码: 
/// <summary>
        /// 在后台运行的线程中接收数据的函数
        /// </summary>
        private void ReceiveData()
        {
            //在本机先指定端口接收
            IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.46"), port);
            udpClient = new UdpClient(iep);
            //必须使用组播地址范围内的地址
            udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.1"));
            udpClient.Ttl = 50;
            IPEndPoint remote = null;
            //接收从远程主机发送过来的信息
            while (true)
            {
                try
                {
                    //关闭udpClient时会产生异常
                    byte[] bytes = udpClient.Receive(ref remote);
                    string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
                    AppendString(string.Format("来自{0}:{1}",remote,str));
                }
                catch
                {
                    //退出循环,并结束线程
                    break;
                }

            }
        }

        private void sendData()
        {
            UdpClient myUdpClient = new UdpClient();
            //允许发送和接收广播数据报
            myUdpClient.EnableBroadcast = true;
            //必须使用组播地址范围内的地址
            IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.0.0.1"), port);
            //将发送内容转换为字节数组
            byte[] bytes = Encoding.UTF8.GetBytes(txtSend.Text);
            try
            {
                //向子网发送消息
                myUdpClient.Send(bytes, bytes.Length, iep);
            }
            catch (SocketException e)
            {
                MessageBox.Show("Error:" + e.ToString());
            }
            finally 
            {
                myUdpClient.Close();
            }
        }

#14


路过..帮顶。

#1


这里没有砖家?

#2


这里没有砖家,有攻城使。

#3


有个路由器不支持IGMP?你两个路由器换个位置看看

#4


引用 3 楼 hztltgg 的回复:
有个路由器不支持IGMP?你两个路由器换个位置看看

好的,我试一下

#5


引用 2 楼 lei1988 的回复:
这里没有砖家,有攻城使。

有攻城屎,好用也行

#6


一般情况下,UDP组播只在同一个网段内(即子网内),跨越网段组播要有交换机或路由器支持,路由器不支持就没办法了,通常专业交换机和路由器才具备这样的功能

#7


引用 6 楼 jq_whh 的回复:
一般情况下,UDP组播只在同一个网段内(即子网内),跨越网段组播要有交换机或路由器支持,路由器不支持就没办法了,通常专业交换机和路由器才具备这样的功能

是同一个网段,只是其中一个路由器只能接四条线,所以就把其中的一条接出来连到另一个路由器上,再由另一个路由器分出几条线出来

#8


你确定你用的是路由器?而不是交换机或者hub?同一个网段用路由器?

#9


使用的是级联端口吗,级联端口好象也不行

#10


这个不会.

#11


引用 8 楼 hztltgg 的回复:
你确定你用的是路由器?而不是交换机或者hub?同一个网段用路由器?

是路由器,上面有中文写着的“路由器”,我又把程序试了一下,好像通了,能发过去了

#12


通了马上结贴,不过还没怎么搞清楚IGMP,ICMP之类的东西,等后面再不通了,我再开贴,大家等分哦!!!谢谢大家!!!!

#13


附上代码: 
/// <summary>
        /// 在后台运行的线程中接收数据的函数
        /// </summary>
        private void ReceiveData()
        {
            //在本机先指定端口接收
            IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.46"), port);
            udpClient = new UdpClient(iep);
            //必须使用组播地址范围内的地址
            udpClient.JoinMulticastGroup(IPAddress.Parse("224.0.0.1"));
            udpClient.Ttl = 50;
            IPEndPoint remote = null;
            //接收从远程主机发送过来的信息
            while (true)
            {
                try
                {
                    //关闭udpClient时会产生异常
                    byte[] bytes = udpClient.Receive(ref remote);
                    string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
                    AppendString(string.Format("来自{0}:{1}",remote,str));
                }
                catch
                {
                    //退出循环,并结束线程
                    break;
                }

            }
        }

        private void sendData()
        {
            UdpClient myUdpClient = new UdpClient();
            //允许发送和接收广播数据报
            myUdpClient.EnableBroadcast = true;
            //必须使用组播地址范围内的地址
            IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.0.0.1"), port);
            //将发送内容转换为字节数组
            byte[] bytes = Encoding.UTF8.GetBytes(txtSend.Text);
            try
            {
                //向子网发送消息
                myUdpClient.Send(bytes, bytes.Length, iep);
            }
            catch (SocketException e)
            {
                MessageBox.Show("Error:" + e.ToString());
            }
            finally 
            {
                myUdpClient.Close();
            }
        }

#14


路过..帮顶。