Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java nio:客户端已断开连接,服务器未被阻止。selector.select()始终返回1_Java_Socket.io - Fatal编程技术网

Java nio:客户端已断开连接,服务器未被阻止。selector.select()始终返回1

Java nio:客户端已断开连接,服务器未被阻止。selector.select()始终返回1,java,socket.io,Java,Socket.io,当我学习NiO时,Java出现了bug。当客户端断开连接时,服务器不会被阻止。selector.select()始终返回1,这是有意义的。套接字通道始终是可读的,read始终返回EOF 从频道读取EOF后,需要将其从选择器中删除。这是我的代码 包com.socket.Server; 导入java.io.IOException; 导入java.net.InetSocketAddress; 导入java.net.ServerSocket; 导入java.net.Socket; 导入java.nio

当我学习NiO时,Java出现了bug。当客户端断开连接时,服务器不会被阻止。selector.select()始终返回1,这是有意义的。套接字通道始终是可读的,
read
始终返回EOF

从频道读取EOF后,需要将其从选择器中删除。

这是我的代码

包com.socket.Server;
导入java.io.IOException;
导入java.net.InetSocketAddress;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.nio.ByteBuffer;
导入java.nio.channels.SelectionKey;
导入java.nio.channels.Selector;
导入java.nio.channels.ServerSocketChannel;
导入java.nio.channels.SocketChannel;
导入java.nio.charset.charset;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.Set;
公共类ImSocketServer{
专用int端口=8888;
私有字符集cs=Charset.forName(“gbk”);
私有静态ByteBuffer sBuffer=ByteBuffer.allocate(1024);
私有静态ByteBuffer rBuffer=ByteBuffer.allocate(1024);
私有映射clientsMap=newhashmap();
专用静态选择器;
公共ImSocketServer(int端口){
this.port=端口;
试试{
init();
}捕获(例外e){
e、 printStackTrace();
}  
}  
私有void init()引发IOException{
ServerSocketChannel ServerSocketChannel=ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
ServerSocket ServerSocket=serverSocketChannel.socket();
bind(新的InetSocketAddress(端口));
选择器=selector.open();
serverSocketChannel.register(选择器,SelectionKey.OP_ACCEPT);
System.out.println(“服务器在端口上启动:“+端口”);
}  
私有void listen(){
虽然(正确){
试试{
System.out.println(selector.select());
设置selectionKeys=selector.selectedKeys();
对于(SelectionKey:selectionKeys){
试一试{
手柄(钥匙);
}
捕获(例外e){
System.out.println(“挂了");
}
}  
selectionKeys.clear();
selector.selectedKeys().clear();
}捕获(例外e){
e、 printStackTrace();
打破
}  
}  
}  
私有无效句柄(SelectionKey SelectionKey)引发IOException{
serversocketchannelserver=null;
SocketChannel客户端=null;
字符串receiveText=null;
整数计数=0;
如果(selectionKey.isAcceptable()){
server=(ServerSocketChannel)selectionKey.channel();
client=server.accept();
client.configureBlocking(false);
客户机。寄存器(选择器,SelectionKey.OP_READ);
}如果(selectionKey.isReadable()){
client=(SocketChannel)selectionKey.channel();
rBuffer.clear();
count=client.read(rBuffer);
如果(计数>0){
rBuffer.flip();
receiveText=String.valueOf(cs.decode(rBuffer.array());
System.out.println(client.toString()+“:”+receiveText);
发送(客户、接收文本);
client=(SocketChannel)selectionKey.channel();
客户机。寄存器(选择器,SelectionKey.OP_READ);
}  
}   
}  
私有void分派(SocketChannel客户端,字符串信息)引发IOException{
sockets=client.Socket();
字符串名称=“[”+s.getInetAddress().toString().substring(1)+:“+Integer.toHexString(client.hashCode())+”];
如果(!clientsMap.isEmpty()){
对于(Map.Entry:clientsMap.entrySet()){
SocketChannel temp=entry.getValue();
如果(!client.equals(temp)){
sBuffer.clear();
sBuffer.put((name+”:“+info.getBytes());
sBuffer.flip();
临时写入(sBuffer);
}  
}  
}  
客户映射放置(名称、客户);
}  
公共静态void main(字符串[]args)引发IOException{
ImSocketServer服务器=新的ImSocketServer(7777);
server.listen();
}  

}
我应该如何避免它