力的Android立即发送UDP数据包?(Force android to send UDP pac

2019-08-03 04:17发布

我与通过WiFi我银河王牌连接到我的笔记本电脑进行试验。 这两款器件均通过WiFi连接到路由器,双方使用Java。

经过TCP连接给了我很高的坪不时,我决定立足于UDP连接,能够当数据包实际发送到控制。

然而,这似乎是安卓还是缓冲的UDP数据包,并不会立即给他们。 此,或者它已完全关闭无线网络,如果不存在用于第二的一些部分没有发送输出的数据。

首先,我ping通在不定期的电话约每秒一次,重复发送ping请求,只要没有得到任何答复(覆盖UDP数据包丢失):

    computer -> phone -> computer
    Pinging 192.168.1.40: 148.05968ms
    Pinging 192.168.1.40: 524.41156ms
    Pinging 192.168.1.40: 705.8688ms
    Pinging 192.168.1.40: 3.705367ms
    Pinging 192.168.1.40: 3.872159ms
    Pinging 192.168.1.40: 549.4541ms
    Pinging 192.168.1.40: 479.29843ms
    Pinging 192.168.1.40: 3.89936ms
    Pinging 192.168.1.40: 428.85876ms
    Pinging 192.168.1.40: 739.28125ms

我工作围绕这一问题,通过从手机发送数据包的计算机只有1每100ms的数据字节,就比常规的其他变着法子:

    computer -> phone -> computer
    Pinging 192.168.1.40: 4.147753ms
    Pinging 192.168.1.40: 3.738213ms
    Pinging 192.168.1.40: 14.133768ms
    Pinging 192.168.1.40: 4.470561ms
    Pinging 192.168.1.40: 3.628386ms
    Pinging 192.168.1.40: 3.898334ms
    Pinging 192.168.1.40: 3.512401ms
    Pinging 192.168.1.40: 7.907006ms
    Pinging 192.168.1.40: 5.234216ms
    Pinging 192.168.1.40: 5.639137ms

至关重要的是我的应用程序需要低响应时间,所以我会不停地发送空包这样的(只要至少有传输没有真正的数据)。 我想知道,我是否可以强制机器人来尽可能快地作出反应,而无需到处乱扔网络的所有无用的数据。 那么,有没有更好的解决方案?

顺便说一句,我假设的问题是智能手机,而不是电脑,但它也有可能是计算机等待传入数据包,然后发送它的数据包。 从我所了解的网络,这是非常不可能的,虽然。

谢谢你的帮助!

Answer 1:

至于Java的来讲,一旦DatagramSockect.send(...)被调用,数据报“发送”。 有一个在Java应用程序的空间没有缓冲,没有办法控制的OS任何缓冲。

这是不可能的TCP或UDP的“退缩”的数据包。 这是更有可能的是问题的根源是什么在无线网络的水平......或者可能具有路由......和OS被延迟发送数据包,直到问题解决本身。


谢谢,我现在实现只发送,如果有在此期间没有发送其他数据包的保活分组。

这听起来像你的保活坪被预期的效果......从我推断,问题的根源是/是在WiFi“链接”正在由于不活动下降。 (这听起来像一个“不消耗电池”功能...)这表明,一种替代解决将是看看你是否可以调整的WiFi超时。

此外,它会更快将数据包发送到另一个端口,其上没有人会听吗? 它应该还是有不一样的效果,对不对?

这是不可能作出任何区别。 没有证据表明,问题是造成堵塞。 证据指向您的手机关闭不活动的WiFi以节省电力...



文章来源: Force android to send UDP packets immediately?