我正在尝试通过 WiFi 将我的 Galaxy Ace 连接到我的笔记本电脑。两个设备都通过 WiFi 连接到路由器,并且双方都使用 Java。
在 TCP 连接不时给我很高的 ping 之后,我决定将连接基于 UDP,以便能够控制实际发送数据包的时间。
但是,Android 似乎仍在缓冲 UDP 数据包并且不会立即发送它们。如果在几分之一秒内没有传出数据,则此操作或它会完全关闭 WiFi。
首先,我以大约每秒一次的不规则间隔 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
我通过每 100 毫秒仅使用 1 个字节的数据将数据包从手机发送到计算机来解决此问题,除此之外没有改变例程:
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
对于我的应用程序来说,低延迟至关重要,所以我会继续发送这样的空数据包(至少只要没有传输真实数据)。我想知道,如果我可以强制 android 尽可能快地响应,而不需要在整个网络中抛出无用的数据。那么,有没有更优雅的解决方案呢?
顺便说一句,我假设问题出在智能手机上,而不是计算机上,尽管它也可能是计算机在等待传入的数据包然后发送它的数据包。不过,从我对网络的了解来看,这不太可能。
谢谢你的帮助!