客户端终止后,服务端一直循环
报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--------------"); }