gpt4 book ai didi

java - 强制android立即发送UDP数据包?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:34 25 4
gpt4 key购买 nike

我正在尝试通过 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 尽可能快地响应,而无需在整个网络中抛出无用数据。那么,有没有更优雅的解决方案呢?

顺便说一句,我假设问题出在智能手机上,而不是计算机上,尽管它也可能是计算机在等待传入数据包然后发送数据包。不过,据我对网络的了解,这不太可能。

感谢您的帮助!

最佳答案

就 Java 而言,一旦调用了 DatagramSockect.send(...),数据报就被“发送”了。 Java 应用程序空间中没有缓冲,也无法控制操作系统中的任何缓冲。

TCP 或 UDP 不太可能“阻止”数据包。根本问题更有可能出在 WiFi 级别……或者可能与路由有关……并且操作系统会延迟发送数据包,直到问题自行解决。


Thanks, I now implemented sending those keep-alive packets only if there was no other packet sent during that time.

听起来你的 keep-alive ping 正在产生预期的效果......据此我推断根本问题是/是 WiFi“链接”由于不活动而被丢弃。 (这听起来像是“不要耗尽电池”功能......)这表明另一种解决方法是查看是否可以调整 WiFi 超时。

Besides that, would it be faster to send packets to another port, on which nobody is listening? It should still have the same effect without, right?

不太可能产生任何影响。没有证据表明问题是由拥塞引起的。证据表明您的手机会关闭不活动的 WiFi 以节省电量...

关于java - 强制android立即发送UDP数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com