TCP接続を受け入れるサーバーを作成しました。ソケットに接続した後、入力ストリームからデータを読み取るためにループします。
手順:
- サーバーを起動しました。
- クライアントを起動します。
今、私はクライアントを閉じています。
次に、サーバーから SocketException Connection Reset が返されます
入力ストリームから読み取る前に、クライアントが生きているかどうかを確認するにはどうすればよいですか。
TCP接続を受け入れるサーバーを作成しました。ソケットに接続した後、入力ストリームからデータを読み取るためにループします。
手順:
今、私はクライアントを閉じています。
次に、サーバーから SocketException Connection Reset が返されます
入力ストリームから読み取る前に、クライアントが生きているかどうかを確認するにはどうすればよいですか。
サーバーが「接続のリセット」を取得した場合、相手側で既に閉じられている接続に書き込みを行っている可能性があります。ユーザーが「戻る」ボタンを押すブラウザが良い例です。これが予期された状態である場合は、例外を無視してください。アプリケーション プロトコル エラーである場合は、アプリケーションをデバッグします。
ソケットが接続されているかどうかを確認する方法は 2 つあります。ソケットに対して読み取りまたは書き込みを行うことができます。接続されている場合はエラーが発生しません。接続されていない場合はエラーが発生します。これは、ソケットが接続されているかどうかを確認する方法です。
BufferedReader reader;
public void run()
{
try
{
String message;
while((message = reader.readLine())!=null) //The thread stops here untill the reader has somthing to read
{
System.out.println(message);
}
}catch(Exception e)
{
System.out.println("Client disconnected!");
// an error is thrown when reader cannot read the stream because it is closed, you will get a connection reset error.
}
}
ソケットが接続されると、リーダーは何かが読み取られるまで待機します (メッセージ = reader.readLine())。クライアントが切断され、Socket が閉じられると、ストリームが閉じられているために読み取ることができるものがないため、リーダーは例外をスローします。これが役立つことを願っています!