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

为什么我的UDP组播没有到达网络上的机器?

如何解决《为什么我的UDP组播没有到达网络上的机器?》经验,为你挑选了1个好方法。

我正在尝试使用UDP多播设置自动发现,并使用来自互联网的一些示例代码.这似乎当我运行在客户端和在同一台机器上的服务器工作正常,但是当我在不同的机器上运行它们,无论是与一机在虚拟机上运行我的机器(VirtualBox的)上或在其他"真正"的机器网络然后其他机器似乎永远不会收到正在广播的消息.

在一些谷歌搜索后,似乎可能的罪魁祸首将是路由器(SpeedTouch 780)可能正在丢弃数据包.我怎样才能检查是否是这种情况?他们可以检查其他事情以尝试追踪问题吗?可能完全是别的东西吗?

代码:

服务器代码

using System;
using System.Net.Sockets;
using System.Text;

internal class StockPriceMulticaster
    {
    private static string[] symbols = {"ABCD", "EFGH", "IJKL", "MNOP"};

    public static void Main ()
        {
        using (UdpClient publisher = new UdpClient ("230.0.0.1", 8899))
            {
            Console.WriteLine ("Publishing stock prices to 230.0.0.1:8899");
            Random gen = new Random ();
            while (true)
                {
                int i = gen.Next (0, symbols.Length);
                double price = 400*gen.NextDouble () + 100;
                string msg = String.Format ("{0} {1:#.00}", symbols, price);
                byte[] sdata = Encoding.ASCII.GetBytes (msg);
                publisher.Send (sdata, sdata.Length);
                System.Threading.Thread.Sleep (5000);
                }
            }
        }
    }

和客户:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class StockPriceReceiver{
    public static void Main(){
        UdpClient subscriber = new UdpClient(8899);
        IPAddress addr = IPAddress.Parse("230.0.0.1");
        subscriber.JoinMulticastGroup(addr);
        IPEndPoint ep = null;
        for(int i=0; i<10;i++){
            byte[] pdata = subscriber.Receive(ref ep);
            string price = Encoding.ASCII.GetString(pdata);
            Console.WriteLine(price);
        }
        subscriber.DropMulticastGroup(addr);
    }
}

编辑

如此看来,这是公布了其在VirtualBox的UDP数据包仅主机网络接口,由于某种原因,而不是所有的机器都连接到无线网络.只需要弄清楚如何让它不这样做......所以在答案中添加了分辨率......



1> Sam Holder..:

所以问题结果是因为我有一个以上的活动网络连接,它选择一个并使用它,这导致UDP数据包在客户端正在侦听的不同网络连接上发送出去.因为我已经安装了虚拟机盒,它已经安装并激活了VirtualBox仅主机网络适配器,因此可以支持仅主机网络连接.当我将VirtualBox切换到仅主机模式时,数据包开始被接收.禁用VirtualBox适配器并切换回桥接连接也很有效.

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