java - 服务器未收到 UDP 广播数据包

标签 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尝试了一下,效果很好。

提前谢谢

最佳答案

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

关于java - 服务器未收到 UDP 广播数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23316212/

相关文章:

android - 如何使用 PreferenceFragment?

python - HTTP/1.1 400 错误请求。命令部分数量错误

c - Linux - 串口行为不同于套接字

java - Spring Boot 2.3 Liveness Probe 功能在正常关闭时失败

java - Liferay 并发文件条目上传

android - 内部类中的最终变量问题

c++ - 为什么 ZeroMQ 不使用其内部线程等待(接收/发送)?

java - enqueue okhttp3无法解析方法java

java - 如何在执行时仅包含某些Java类 "gradle test"

java - 在android中使用Picasso填充gridview