首先-对不起我的英语,我不是“母语作家”。
我正在用 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 控制台应用程序运行时,而不是“从空端口真监听 /::”我得到“从空端口真监听 0.0.0.0/0.0.0.0”。
我在清单中有这样的权限:
<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"/>
请帮忙!