1

Android 4.0 (api 15) でUDP サーバープログラムを書いているのですが、プログラムの起動時に android で UDP サーバーに接続できません。

環境:

virtualbox, android x84 4.0, ping to/from virtualbox-android are ok,

UDP サーバーコード:

DatagramSocket ds = new DatagramSocket(9101);
<uses-permission android:name="android.permission.INTERNET" />

Androidショーのnetstat

udp6    0    0    :::9101    :::*    CLOSE

通常の IPv4 UDP リスニング ソケットを作成するにはどうすればよいですか?

4

2 に答える 2

0

メイン スレッドでネットワーク トラフィックを受信または実行することはできません。

そのためには、別の実行可能なスレッドを作成する必要があります。

new Thread(new Runnable() {
    public void run() {
    try {
           if (clientsocket == null) {
        clientsocket = new DatagramSocket(null);
            clientsocket.bind(new InetSocketAddress("0.0.0.0", 1337));
        clientsocket.setBroadcast(true);
       }
           byte[] receivedata = new byte[1024];
       while (true) {
        DatagramPacket recv_packet = new DatagramPacket(
        receivedata, receivedata.length);
        clientsocket.receive(recv_packet);
            alertMessage = new String(recv_packet.getData());
        InetAddress ipaddress = recv_packet.getAddress();
        int port = recv_packet.getPort();
        String msg = "RECEIVED UDP MSG FROM " + ipaddress.toString() + ":" + Integer.toString(port) + " :" + alertMessage;  Log.d("UDP", msg);
        myHandler.post(alertMsg);
        }
    } catch (Exception e) {
        Log.e("UDP", "S: Error", e);
    }
      }
}).start();

次に、別のクラス コードで、メイン UI に干渉する可能性のある実行可能なタスクを実行します。

final Runnable alertMsg = new Runnable() {
    public void run() {
        Toast.makeText(getApplicationContext(), alertMessage, Toast.LENGTH_LONG).show();
    }
};
于 2013-10-18T09:21:35.260 に答える
0

試す

DatagramSocket ds = new DatagramSocket(9101, InetAddress.getByName("192.168.1.1"));

そして、それがうまくいくかどうかを確認してください。次のように、最初にソケットを作成し、後でバインドすることもできます。

DatagramSocket ds = new DatagramSocket(null);
ds.bind(new InetSocketAddress("192.168.1.1", 9101));
于 2012-04-27T13:18:04.143 に答える