2012-04-27 3 views
1
내가 안드로이드 4.0에서 UDP 서버 프로그램을 writting있어

(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" /> 
안드로이드에서 6,

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