1

サーバーソケットがアイドルタイムアウトのために閉じた場合のように、クライアントソケットでサーバー接続を閉じるための例外を区別したいと思います。その理由は、アイドルタイムアウト例外としてクライアント側で生成する必要があります。同様に、接続失敗例外などの接続失敗についても同様です。この問題を解決するのを手伝ってください。前もって感謝します。

4

2 に答える 2

1

サーバーがソケットを適切に閉じる場合、クライアントで発生する可能性のある例外は1つだけであり、クライアントがキャッチして把握する必要のある一連の異なる例外はありません。EOSの指示があります。read()は-1を返し、readLine()はnullを返し、readXXX()は他のXに対してEOFExceptionをスローします。

ネットワーク障害が原因で接続が切断された場合、クライアントが「接続リセット」というテキストでIOExceptionを取得する可能性があります。接続は維持されているが、サーバーがデータを送信しておらず、クライアントに読み取りタイムアウトがある場合、クライアントはSocketTimeoutExceptionを受け取ります。これらはどちらも、サーバーが接続を閉じたことを意味するものではありません(ただし、サーバーが接続をリセットする可能性がありますが、これについてはここでは説明しません)。

サーバーがソケットを閉じた理由を知る必要がある場合は、メッセージを介して通知する必要があります。

于 2012-09-02T21:17:29.377 に答える
1

最善の方法は、サーバーが接続を閉じた理由を示すメッセージを送信することです。サーバーは、デフォルトでアイドル状態になっている接続を閉じません。

于 2012-09-02T17:37:13.723 に答える