【问题标题】:Android Receiving UDP Packets from same IP AdrAndroid 从同一 IP 地址接收 UDP 数据包
【发布时间】:2012-05-24 20:36:00
【问题描述】:

我的 Android 应用程序在 s.receive(p) 处停止,因为它没有收到任何数据包。

我让 X-Plane 将数据包发送到与我想要接收这些数据包的 Android 平板电脑相同 IP 地址的随机端口 49059。这是因为它们正在运行相同的连接。 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);

【问题讨论】:

    标签: android udp packet


    【解决方案1】:

    如果您有wireshark,请尝试检查数据包是否由X-Plane 发送。

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

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

    【讨论】:

    • 安卓平板不需要回包,所以只是接收。是的,它现在在 UI 线程中,只是为了确保它有效。但是它没有收到数据包,因为我已经在 s.receive(p) 之后放置了一个 Log.d 并且它没有到达那里。我所说的“冻结”是指它在接收功能上停滞不前。
    • 我的意思是确保数据包的来源实际上是发送数据包。接收数据包的缓冲区大小(在您的情况下为 1024)是否足够?另外,请尝试不同的端口,以防万一。如果您能澄清“在同一个 IP 中”的含义,将会很有帮助
    • 得到它的工作,感谢您的帮助,Wireshark 帮助确定了问题(错误的 IP)。
    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多