UDP(

2011-10-18 14 views
0

)でデバイスから(WLANの)ソケットからデータを受信できません。私のAndroidデバイスが私のホーム無線ネットワークに接続されています。また、特殊な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); 
    } 
} 

私はデータ受信のための2つのアプローチ持っているのに対し:

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); 
    } 
} 
を私はここで

作業アプリがコマンドを送信する方法ですiphone-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) 

第2のAP:

最初のtryブロックでのアプローチは、例外につながりますproachは、データを受け取っていないsocket.receive(パケット)によってスレッドをブロックします。私は、デバイスがUDP 44445経由でWLAN経由でデータを送信することを知っています。何が間違っている? ありがとうございました!

+0

最後に解決策が見つかりました:http://code.google.com/p/boxeeremote/wiki/AndroidUDP – softwaresupply

答えて

0

あなたは現在のコードがメッセージを1回だけ受信するように見えるので、whileループの中にreceive()関数を置く必要があると思います。有効なデータが含まれることを保証するものではありません。

+0

私はそれをwhileループに入れましたが、まだコマンドがブロックされているため、ループにも到達しません2回目の反復で。 – softwaresupply

1

UDPポート44445はeMuleプロトコルで使用されます。あなたのデバイスで他のeMuleクライアントをアクティブにしていますか?

更新:

問題は、あなたがバインドアドレスのようです - それは、ローカルホスト上のアドレス、お使いのデバイスの、すなわちIPアドレスではなく、リモートデバイスでなければなりません。コンストラクタDatagramSocket(port, InetAddress)を参照してください。

+0

編集済み - IPアドレスに問題があるようです。 –

+0

実際には、私はタスクキラーのすべてのアプリを殺しました。 44445の話を聞くアプリはありません.IPアドレスについて何が間違っているのでしょうか?特にデータを送信しているとき。 – softwaresupply

+0

これで192.168.2.114のUDPデバイスからデータを受信するにはどうしたらいいですか?なぜデータを送信するとバインディングが機能するのですか? – softwaresupply