2012-04-27 2 views
1
私は、Android 4.0で UDPサーバープログラムを足すよ

(API 15) :UDP6のCLOSEプログラミングアンドロイド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" /> 

アンドロイドのショーでは、netstat

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

は、どのように私は、通常のIPv4 UDPリスニングソケットを作ることができますか?

答えて

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)); 
0

あなたはメインスレッドでネットワークトラフィックを受信したりすることができません:あなたは同じように、また、最初のソケットを作成し、後でそれをバインドすることができます。別のクラスのコードでメインUIに干渉する可能性が実行可能なタスクを

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(); 

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

final Runnable alertMsg = new Runnable() { 
    public void run() { 
     Toast.makeText(getApplicationContext(), alertMessage, Toast.LENGTH_LONG).show(); 
    } 
}; 
関連する問題