UDp广播数据包未被服务器接收

时间:2014-04-26 20:33:57

标签: java android sockets udp datagram

我正在创建一个发送广播消息的基本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尝试了它并且工作正常。

提前谢谢

1 个答案:

答案 0 :(得分:1)

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