2012-04-27 3 views
1

Я сочинительство UDP сервера программы на в Android 4.0 (API 15) при запуске программы, я не можите подключиться к UDP-серверу в андроидеudp6 ЗАКРЫТЬ при программировании андроида УДП сервер

среды :

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

Вы не можете получать или осуществлять сетевой трафик в основном потоке.

Вы должны создать отдельную исполняемую нить, чтобы сделать это:

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