2

我有一个充当服务器的 java 应用程序和一个充当客户端的 android 手机。它们通过 TCP 套接字进行通信。

我经常让客户端睡眠,当它的缓冲区填满时,我希望 wifi 无线电能够进入睡眠状态。问题是客户端没有睡觉。我注意到wireshark 说我的服务器大约每半秒发送一次TCP KeepAlive 数据包,因此wifi 无法休眠。我在服务器和客户端上尝试了以下内容。

connectionSocket.setKeepAlive(false);

但这似乎没有任何改变。我正在使用wireshark来分析流量。这是wireshark的屏幕截图......黑线表示我的客户在哪里睡觉并且它的接收缓冲区已满。我可以阻止服务器发送keepAlive数据包吗?

谢谢!

4

3 回答 3

1

TCP 连接保持打开直到关闭,保持活动机制是为了检测连接失败。

查看此链接:TCP 套接字连接是否具有“保持活动状态”?

于 2011-03-10T02:57:08.363 回答
0

实际上,TCP 保持活动行为取决于 TCP 堆栈的实现。话虽如此,应该遵循 RFC 标准。即使 TCP 实现支持 keep-alive,它也应该默认不使用它,除非在连接上请求。

请参阅RFC 1122 第 4.2.3.6 节“TCP Keep-Alives”

引用:

Implementors MAY include "keep-alives" in their TCP
implementations, although this practice is not universally
accepted. If keep-alives are included, the application MUST
be able to turn them on or off for each TCP connection, and
they MUST default to off.
于 2021-06-28T00:30:30.993 回答
0

服务器和客户端之间的中间设备也会发起TCP keep-alive,如防火墙、网守。似乎客户端无法阻止 TCP keep-alive。

于 2021-06-24T08:48:46.980 回答