私はJavaでクライアントとサーバープログラムを持っています。サーバーはwifi経由でクライアントにデータを送信しています。クライアントで Wi-Fi 接続が切断されると、例外がスローされ、受信ループから抜け出します。サーバーは引き続きデータを送信します。サーバーが使用するメソッドは oos.writeObject() です。サーバーのクライアントで wifi の切断を検出し、サーバーが送信ループから抜け出すにはどうすればよいですか?
1 に答える
0
クライアント (wifi 接続のいくつかのタイプの障害モードの下) が接続が切断されたときにすぐに気付く理由は、wifi インターフェイスがクライアントに対してローカルであり、オペレーティング システムがダウンとして検出されるとすぐに破棄するためです。サーバーの観点からは、失敗するのは遠く離れたネットワーク リンクです。
接続が切断されると、最初はサーバーがデータのバッファリングを続行します。バッファー (サーバーのオペレーティング システム バッファーと TCP ウィンドウ サイズ) がいっぱいになると、サーバーはさらにデータを送信しようとするとブロックされます。
その後、接続がまだダウンしている場合、サーバーは接続がタイムアウトしたことを宣言し、例外が発生します。代わりに、接続が回復すると、バッファが空になり、通常のデータ フローが再開されます。
できたとしても、遠く離れたネットワーク ホップに障害が発生したときにサーバーの接続がすぐにタイムアウトになるように、実際には変更したくありません。これを行うと、接続が非常に壊れやすくなります。ネットワークの再収束イベントや短い一時的な障害が起こるたびに、接続が切断されます。
于 2013-02-25T19:22:10.307 に答える