2012-05-24 143 views
0

我的Android应用程序在s.receive(p)处停顿,因为它没有收到任何数据包。Android接收来自相同IP地址的UDP数据包

我有X平面将数据包发送到同一IP地址中的随机端口49059作为我希望接收这些数据包的Android平板电脑。这是因为他们正在运行相同的连接。 X-Plane使用端口49000发送数据包并使用49001接收数据包。我想不出什么是错的。我无法在Android平板电脑上使用3G,这是我可以测试的唯一互联网连接。此外,清单中还启用了所有互联网和wifi权限。有任何想法吗?这里的代码:

byte[] bar = new byte[1024]; 
DatagramPacket p = new DatagramPacket(bar, bar.length); 
DatagramSocket s = new DatagramSocket(49059); 
s.setSoTimeout(30000); 
s.receive(p); 

回答

0

如果你有wireshark,请尝试检查数据包是否由X平面发送。

此外,你说你的“应用程序冻结”,这不一定意味着数据包没有被接收。我不知道你在做什么,但也许你正在UI线程上执行接收/发送操作,这会导致应用程序冻结。

尝试在s.receive(p)之后放置一个日志,并检查它是否出现在LogCat中。 Log.d("MYACT","Packet received");

+0

android平板电脑不需要发回数据包,所以它只接收。是的,它现在在UI线程中,只是为了确保它的工作。它虽然没有收到数据包,因为我已经在s.receive(p)之后放了一个Log.d,但它没有到达那里。 “冻结”的意思是它在接收函数上停顿。 – lespommes

+0

我的意思是确保数据包的来源实际上是发送数据包。 而且是接收数据包的缓冲区大小(在你的情况下为1024)是否足够?另外,也请尝试不同的端口,以防万一。 如果你能澄清你的意思是“在相同的IP” – Alabhya

+0

得到它的工作,谢谢你的帮助,Wireshark帮助确定问题(错误的IP),这将是有益的。 – lespommes