我现在正在使用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"
地址发送它,但它也没有帮助。
答案 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捕获它们。