java - 在 Android 上接收广播消息

标签 java android sockets udp broadcast

首先-对不起我的英语,我不是“母语作家”。

我正在用 C++ 发送广播消息,并希望在 Android 设备上接收它。我创建了这样的代码:

    System.out.println("receiveBroadcast()");
    DatagramSocket socket = new DatagramSocket(3866);
    socket.setBroadcast(true);
    System.out.println("Listen on " + socket.getLocalAddress() + " from " + socket.getInetAddress() + " port " + socket.getBroadcast());
    byte[] buf = new byte[512];
    DatagramPacket packet = new DatagramPacket(buf, buf.length);
    while (true) {
      System.out.println("Waiting for data");
      socket.receive(packet);
      System.out.println(packet.getAddress());
      System.out.println("Data received");
    }

当我将其编译为标准的 Java SE 控制台应用程序并在连接到网络的其他计算机上运行时,它可以工作。 它在 Android 上不起作用,我不知道为什么。在 Android 上,它只是等待数据但从不接收数据:

03-18 15:47:05.045: I/System.out(16651): receiveBroadcast()
03-18 15:47:05.055: I/System.out(16651): Listen on /:: from null port true
03-18 15:47:05.065: I/System.out(16651): Waiting for data

有趣的是,当我在 Windows 系统下将其作为标准 Java 控制台应用程序运行时,我得到的不是“Listen on/::from null port true”,而是“Listen on 0.0.0.0/0.0.0.0 from null port true” .

我在 list 中有这样的权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />   
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>

请帮忙!

最佳答案

我知道这是一个旧线程,但我想我在这里分享它,因为将来它可能会对其他人有所帮助。

著名代码写here我建议的 2 个解决方案对我都不起作用,因为它取决于您的设备和操作系统

无论如何,你们可能想尝试其中的一些解决方案:

1- 在您的 wifi 上创建一个锁,这样它就不会在闲置一段时间后关闭

WifiManager wifi;
wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock mLock = wifi.createMulticastLock("lock");
mLock.acquire();

2- 检查此链接 here因为在某些情况下广播消息会被操作系统阻止

关于java - 在 Android 上接收广播消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15479618/

相关文章:

android - 从 apk 加载 map 时出现问题

android 如何在 root 设备的\system\fonts 目录中安装自定义字体

c++ - 如何在Qt中创建线程网络服务器?

java - 自定义接收器无法正确启动

java - Truecaller android sdk 错误代码 3

java - Eclipse 调试 - 在没有断点的情况下停止

java - 非法状态异常 : Fragment already added

java - Android - 不同时保留原始列表数组吗? java

java - 如何通过同一个套接字发送不同类型的数据

linux - 将过滤器附加到 linux 中的 tcp 套接字