【问题标题】:UDp Broadcast packets not received by the server服务器未收到 UDP 广播数据包
【发布时间】:2014-04-26 20:33:56
【问题描述】:

我正在创建一个发送广播消息的基本 android 应用程序。在我的笔记本电脑中,我有一台服务器正在监听所有广播消息。但是包裹从未收到,我不知道为什么(如果我将它发送到特定的服务器 ip,服务器会收到数据包)。这是我的应用程序和服务器代码。

服务器:

        byte[] buffer = new byte[2048];
        int port = 8063;
        DatagramSocket dsocket = new DatagramSocket(port);
        dsocket.setBroadcast(true);
        
        DatagramPacket packet = new DatagramPacket(buffer,
                            buffer.length);
                        
                        
       while (true) 
        {
             System.out.println("Receiving...");
             dsocket.receive(packet);
             System.out.println("received...");
             String msg = new String(buffer, 0, packet.getLength());
             System.out.println(packet.getAddress().getHostName()
                                    + ": " + msg);
             packet.setLength(buffer.length);
         }

应用:

socket = new DatagramSocket();
socket.setBroadcast(true);

DatagramPacket packet = new DatagramPacket(new byte[]{0,1,2,3},4,
            InetAddress.getByName("172.16.255.255"), 8063);
socket.send(packet); 

关于为什么服务器没有收到包裹的任何建议?

编辑:

大学网络好像屏蔽了广播包,我们用4g试了一下,效果很好。

提前谢谢你

【问题讨论】:

    标签: java android sockets udp datagram


    【解决方案1】:

    广播只能到达同一个broadcast domain 内的节点,而单播(如您的第二个示例中所示)是 IP 路由的,因此除非您的客户端和服务器机器连接到同一个交换机/集线器,或明确放入同一个 VLAN,广播对你不起作用。

    【讨论】:

    • 您好,谢谢您的回答。应用程序和服务器都连接到相同的广播方向。我们在 4G 上进行了相同的操作(应用程序和计算机都连接到 4g),并且成功了。所以唯一可能的答案是大学wifi不允许那些类型的消息......我们试图实现jmdns但它似乎在android上失败了,你知道除了蓝牙之外的其他替代方法来从应用程序中发现pc IP吗?
    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    相关资源
    最近更新 更多