JAVA NIO写服务端判断客户端断开连接的方法
2014-12-01 15:59
1391 查看
不过这个方法有个问题,就是
1、能侦测到客户端主动断开与服务端的连接,但是如果客户端掉线,服务端就接收不到了。。
2、如果处于等待状态,就会出问题。比如说客户端的数据还没有准备好发送,这样你就已经关闭了链接。
最近学习NIO,一直有个疑问,怎么知道客户端断开了连接.
在上网找和试验之后发现下面的方法可以实现这个目的.
我们一般会在服务端有个大的WHILE,然后在里面循环判断是否有客户端连接
ssc = (ServerSocketChannel) sk.channel();
sc = ssc.accept();
System.out.println("客户端连接..."
+ sc.socket().getRemoteSocketAddress());
如果有连接,则注册读入的键
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
然后我们就可以在有读入的时候被通知到并及时处理,我们可以在此时加入一个判断,如果读入的RECCOUNT=-1,
则可以判为断开.
ByteBuffer bf = ByteBuffer.allocate(6);
SocketChannel sc = (SocketChannel) sKey.channel();
buffer.clear();
reccount = sc.read(buffer);
if(reccount == -1){
System.out.println("断开..."
+ sc.socket().getRemoteSocketAddress());
sc.close();
}
1、能侦测到客户端主动断开与服务端的连接,但是如果客户端掉线,服务端就接收不到了。。
2、如果处于等待状态,就会出问题。比如说客户端的数据还没有准备好发送,这样你就已经关闭了链接。
最近学习NIO,一直有个疑问,怎么知道客户端断开了连接.
在上网找和试验之后发现下面的方法可以实现这个目的.
我们一般会在服务端有个大的WHILE,然后在里面循环判断是否有客户端连接
ssc = (ServerSocketChannel) sk.channel();
sc = ssc.accept();
System.out.println("客户端连接..."
+ sc.socket().getRemoteSocketAddress());
如果有连接,则注册读入的键
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
然后我们就可以在有读入的时候被通知到并及时处理,我们可以在此时加入一个判断,如果读入的RECCOUNT=-1,
则可以判为断开.
ByteBuffer bf = ByteBuffer.allocate(6);
SocketChannel sc = (SocketChannel) sKey.channel();
buffer.clear();
reccount = sc.read(buffer);
if(reccount == -1){
System.out.println("断开..."
+ sc.socket().getRemoteSocketAddress());
sc.close();
}
相关文章推荐
- JAVA NIO写服务端判断客户端断开连接的方法
- Linux网络编程中服务端判断客户端断开连接。
- Tcp服务端判断客户端是否断开连接
- C# socket服务端判断 客户端已经断开连接的一个小办法
- Linux网络编程--服务端判断客户端断开的经验方法
- 服务器中判断客户端socket断开连接的方法【转】
- Linux网络编程--服务端判断客户端断开的经验方法
- [置顶] Linux网络编程--服务端判断客户端断开的经验方法
- Linux网络编程--服务端判断客户端断开的经验方法
- 【VS开发】TCP服务端如何判断客户端断开连接
- 服务器中判断客户端socket断开连接的方法
- 服务器中判断客户端socket断开连接的方法
- Tcp服务端判断客户端是否断开连接
- tcp 服务端如何判断客户端断开连接
- 服务器中判断客户端socket断开连接的方法
- Java nio服务器端对于客户端连接状态的判断
- Tcp服务端判断客户端是否断开连接
- Tcp服务端判断客户端是否断开连接
- 服务器中判断客户端socket断开连接的方法
- tcp 服务端如何判断客户端断开连接