2

サーバーとして機能するJavaアプリケーションと、クライアントとして機能するAndroidフォンがあります。それらは TCP ソケットを介して通信しています。

クライアントをスリープ状態にすることがよくあり、そのバッファーがいっぱいになったら、wifi ラジオをスリープ状態にできるようにします。問題は、クライアントが眠っていないことです。Wireshark が、サーバーが約 0.5 秒ごとに TCP キープアライブ パケットを送信しているため、wifi がスリープ状態にならないことに気付きました。サーバーとクライアントで次のことを試しました。

connectionSocket.setKeepAlive(false);

しかし、これは何も変わらないようです。Wireshark を使用してトラフィックを分析しています。これはwiresharkのスクリーンショットです...黒い線は、クライアントがスリープ状態にあり、受信バッファがいっぱいであることを示しています。サーバーが keepAlive パケットを送信するのを止めることはできますか?

ありがとう!

4

3 に答える 3

1

TCP 接続は、閉じられるまで開いたままになります。キープアライブ メカニズムは、接続の失敗を検出するためにここにあります。

このリンクをチェックしてください: TCPソケット接続には「キープアライブ」がありますか?

于 2011-03-10T02:57:08.363 に答える
0

実際、TCP キープアライブの動作は、TCP スタックの実装に依存します。そうは言っても、RFC 標準に従う必要があります。TCP 実装がキープアライブをサポートしている場合でも、接続で要求されない限り、デフォルトで使用しないようにする必要があります。

RFC 1122 セクション 4.2.3.6「TCP キープアライブ」を参照してください。

引用:

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 に答える