无法从Android模拟器获取UDP数据包

时间:2015-05-23 19:56:20

标签: android udp

我现在正在使用Android应用程序并遇到发送udp数据包的问题。

try {
    InetAddress ipaddress = InetAddress.getByName("192.168.0.19");
    int port = 6500;

    DatagramSocket socket = new DatagramSocket();
    //socket.setBroadcast(true);
    DatagramPacket packet = new DatagramPacket(data, data.length,
            ipaddress, port);
    socket.send(packet);
    Log.d("packet send",packet.getAddress().toString() + " lenght "+ packet.getLength());
    socket.close();
    camera.startPreview();
} catch (Exception e) {
    e.printStackTrace();
}

我还在清单文件中添加了一堆权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

我在模拟器上运行应用程序后工作正常,但即使是packets也已发送。我无法在主机上接收它们(即使wireshark也看不到它们)。我厌倦了在"10.0.0.2"地址发送它,但它也没有帮助。

1 个答案:

答案 0 :(得分:0)

如果要捕获模拟器发送的数据包,目标地址应为&#34; 10.0.2.2&#34;。
这是因为android模拟器实例就像在虚拟路由器后面并且有自己的地址空间。参见emulator networking
由于10.0.2.2是主机127.0.0.1的别名,如果将数据包发送到10.0.2.2,它将被路由到主机的127.0.0.1,然后您可以在主机上使用wireshark捕获它们。