ループエラー:リモートホストが既存の接続を強制的にオフにしました
クライアントが終了すると、サービス側は常にループします.
java.io.IOException:リモートホストは既存の接続を強制的にオフにします.
元のコード
修正後のコード
また、isValid判定を追加することもできます
java.io.IOException:リモートホストは既存の接続を強制的にオフにします.
元のコード
private void read(SocketChannel channel,SelectionKey key) throws Exception {
ByteBuffer buffer = ByteBuffer.allocate(1024); //
channel.read(buffer); //
String request = new String(buffer.array()).trim();
System.out.println(" :" + request);
ByteBuffer outBuffer = ByteBuffer.wrap(" ".getBytes());
channel.write(outBuffer); //
}
try{
this.read(channel,key);
}catch (IOException e){
}
修正後のコード
try{
this.read(channel,key);
}catch (IOException e){
key.cancel();
channel.socket().close();
channel.close();
}
また、isValid判定を追加することもできます
if (key.isReadable()) { //
System.out.println("readable--------------");
} else if (key.isWritable()) {
System.out.println("writable--------------");
}
if (key.isValid() && key.isReadable()) { //
System.out.println(" ");
} else if (key.isValid() && key.isWritable()) {
System.out.println("writable--------------");
}