调试 Android UDP 侦听
debugging Android UDP listening
我想在我的 Android
模拟器中获取本地网络上远程计算机发送的一些传入数据。所以首先,
InetAddress[] inetAddress = InetAddress.getAllByName(android_emulator_ip);
s = new DatagramSocket();
s.connect(inetAddress[0], some_udp_port);
我得到了 android_emulator_ip
运行 adb shell;ifconfig eth0
。这个 IP
是远程计算机使用的那个。
奇怪的是,如果我将此 ip
更改为随机值,我将进入 DatagramSocket 对象的断点调试器,值 isConnected =true
顺便说一下,我在下面没有发现任何错误。如果我在下面的try
块中的s.receive(p);
之后登录,它似乎没有被读取
byte[] message = new byte[300];
DatagramPacket p = new DatagramPacket(message,message.length);
try{
s.receive(p);
}catch{...}
我通过这种方式调试设置超时
s = new DatagramSocket(some_udp_port);
s.setSoTimeout(3000);
然后这就奏效了
byte[] message = new byte[256];
DatagramPacket p = new DatagramPacket(message,message.length);
try{
s.receive(p);
}
该问题与使用 connect
相关,因此将模拟器置于服务器而不是侦听器的位置
我想在我的 Android
模拟器中获取本地网络上远程计算机发送的一些传入数据。所以首先,
InetAddress[] inetAddress = InetAddress.getAllByName(android_emulator_ip);
s = new DatagramSocket();
s.connect(inetAddress[0], some_udp_port);
我得到了 android_emulator_ip
运行 adb shell;ifconfig eth0
。这个 IP
是远程计算机使用的那个。
奇怪的是,如果我将此 ip
更改为随机值,我将进入 DatagramSocket 对象的断点调试器,值 isConnected =true
顺便说一下,我在下面没有发现任何错误。如果我在下面的try
块中的s.receive(p);
之后登录,它似乎没有被读取
byte[] message = new byte[300];
DatagramPacket p = new DatagramPacket(message,message.length);
try{
s.receive(p);
}catch{...}
我通过这种方式调试设置超时
s = new DatagramSocket(some_udp_port);
s.setSoTimeout(3000);
然后这就奏效了
byte[] message = new byte[256];
DatagramPacket p = new DatagramPacket(message,message.length);
try{
s.receive(p);
}
该问题与使用 connect
相关,因此将模拟器置于服务器而不是侦听器的位置