まず、英語で申し訳ありませんが、私は「ネイティブライター」ではありません。
ブロードキャストメッセージを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 fromnullporttrue」になります。
私はマニフェストにそのような許可を持っています:
<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"/>
助けてください!