0

私はJavaでクライアントとサーバープログラムを持っています。サーバーはwifi経由でクライアントにデータを送信しています。クライアントで Wi-Fi 接続が切断されると、例外がスローされ、受信ループから抜け出します。サーバーは引き続きデータを送信します。サーバーが使用するメソッドは oos.writeObject() です。サーバーのクライアントで wifi の切断を検出し、サーバーが送信ループから抜け出すにはどうすればよいですか?

4

1 に答える 1

0

クライアント (wifi 接続のいくつかのタイプの障害モードの下) が接続が切断されたときにすぐに気付く理由は、wifi インターフェイスがクライアントに対してローカルであり、オペレーティング システムがダウンとして検出されるとすぐに破棄するためです。サーバーの観点からは、失敗するのは遠く離れたネットワーク リンクです。

接続が切断されると、最初はサーバーがデータのバッファリングを続行します。バッファー (サーバーのオペレーティング システム バッファーと TCP ウィンドウ サイズ) がいっぱいになると、サーバーはさらにデータを送信しようとするとブロックされます。

その後、接続がまだダウンしている場合、サーバーは接続がタイムアウトしたことを宣言し、例外が発生します。代わりに、接続が回復すると、バッファが空になり、通常のデータ フローが再開されます。

できたとしても、遠く離れたネットワーク ホップに障害が発生したときにサーバーの接続がすぐにタイムアウトになるように、実際には変更したくありません。これを行うと、接続が非常に壊れやすくなります。ネットワークの再収束イベントや短い一時的な障害が起こるたびに、接続が切断されます。

于 2013-02-25T19:22:10.307 に答える