UDP (

2011-10-18 3 views
0

)를 통해 장치의 소켓에서 데이터를 수신 할 수 없습니다. 내 안드로이드 장치가 내 무선 네트워크에 연결되어 있습니다. 또한 특별한 UDP 장치가 연결되어 있습니다. 내 안드로이드 애플 리케이션은 성공적으로 UDP 장치에 명령을 보낼 수 있습니다. 하지만 소켓을 열면 데이터를받지 못합니다. 무엇이 잘못되었는지 보시겠습니까?UDP (

public static final String SERVERIP = "192.168.2.114"; 
public static final int PORT = 44444; 
public void run() { 
    try { 
     serverAddr = InetAddress.getByName(SERVERIP); 
     DatagramSocket socket = new DatagramSocket(); 
     byte[] buf = message.toByteArray(); 
     DatagramPacket packet = new DatagramPacket(buf, buf.length,  serverAddr, PORT); 
     socket.send(packet); 
     socket.close(); 
    } catch (Exception e) { 
     Log.e("UDP", "Sender/Client: Error", e); 
    } 
} 

I 데이터 수신을위한 두 가지 방법이있는 반면 :

public static final String SERVERIP = "192.168.2.114"; 
public static final int SERVERPORT = 44445; 

private InetAddress serverAddr; 

public void run() { 
    try { 
     InetAddress serverAddr = InetAddress.getByName(SERVERIP); 
     DatagramSocket socket = new DatagramSocket(SERVERPORT, serverAddr); 
     byte[] buf = new byte[65213]; 
     DatagramPacket packet = new DatagramPacket(buf, buf.length); 
     socket.receive(packet); 
    } catch (Exception e) { 
     Log.e("UDP", "Receiver: Error", e); 
    } 

    try { 
     serverAddr = InetAddress.getByName(SERVERIP); 
     DatagramChannel channel = DatagramChannel.open(); 
     DatagramSocket socket = channel.socket(); 
     byte[] buf = new byte[65213]; 
     DatagramPacket packet = new DatagramPacket(buf, buf.length,  serverAddr, SERVERPORT); 
     socket.receive(packet); 
     socket.close(); 
    } catch (Exception e) { 
     Log.e("UDP", "Sender/Client: Error", e); 
    } 
} 
을 나는 여기에

작업 응용 프로그램이 명령을 전송하는 방법입니다 아이폰-APP에서 UDP-장치의 IP를 알고

java.net.BindException: Cannot assign requested address 
at org.apache.harmony.luni.platform.OSNetworkSystem.bind(Native Method) 
at dalvik.system.BlockGuard$WrappedNetworkSystem.bind(BlockGuard.java:268) 
at org.apache.harmony.luni.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:81) 
at java.net.DatagramSocket.createSocket(DatagramSocket.java:193) 
at java.net.DatagramSocket.<init>(DatagramSocket.java:95) 
at de.myappname.connection.Receiver.run(Receiver.java:29) 
at java.lang.Thread.run(Thread.java:1019) 

번째 AP :

첫 번째 시도 블록의 접근은 예외 리드 proach는 데이터를 수신하지 않는 socket.receive (packet)에 의해 스레드를 차단합니다. 아이폰과 사양에서 장치가 WLAN을 통해 UDP 44445를 통해 데이터를 전송한다는 것을 알고 있습니다. 어떤 제안이 잘못 되었나요? 감사합니다.

+0

마지막으로 해결책을 찾았습니다. http://code.google.com/p/boxeeremote/wiki/AndroidUDP – softwaresupply

답변

0

당신은 현재 코드가 메시지를 한 번만받는 것처럼 보이기 때문에 while 루프 안에 receive() 함수를 넣어야한다고 생각합니다. 유효한 데이터가 포함되는 것은 아닙니다.

+0

while 루프에 넣었지만 여전히 명령이 블로킹되어 있으므로 루프가 실행되지 않습니다. 두 번째 반복에서. – softwaresupply

1

UDP 포트 44445는 eMule 프로토콜에서 사용됩니다. 다른 eMule 클라이언트가 장치에서 활성화되어 있습니까?

업데이트 :

문제는 당신이 바인딩 주소 것 같다 - 그것은 로컬 호스트의 주소, 장치의 즉, IP 주소가 아닌 원격 장치해야합니다. 생성자 DatagramSocket(port, InetAddress)을 참조하십시오.

+0

수정 됨 - IP 주소에 문제가있는 것 같습니다. –

+0

사실 나는 거기에있는 taskkiler에서 모든 응용 프로그램을 죽였어. hrough 44445를들을 수있는 앱이 없습니다. IP 주소에 대한 잘못된 점은 무엇입니까? 특히 데이터를 보낼 때 작동합니다. – softwaresupply

+0

좋아, 192.168.2.114의 UDP 장치에서 데이터를 수신하려면 어떻게해야합니까? 왜 데이터를 보낼 때 바인딩이 작동합니까? – softwaresupply