不过这个方法有个问题,就是

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 断开连接_JAVA NIO写服务端判断客户端断开连接的方法相关推荐

  1. Java中利用socket实现简单的服务端与客户端的通信(基础级)

    在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...

  2. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

  3. Java中利用socket实现简单的服务端与客户端的通信(入门级)

    Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍.首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特 ...

  4. java模拟网易邮箱登录_使用服务端和客户端两种方法 模拟网易邮箱实现全选,全不选的功能...

    服务端和客户端的差别是 服务端在每次全选或全不选是都要刷新界面 而客户端不会 服务端: 前台 DataKeyNames="id" DataSourceID="SqlDat ...

  5. java socket gui登录_java的socket服务端的GUI

    这几天做了一个基于socket的宠物商店程序,其中服务端的图形化界面问题困扰了很久.今天终于解决,因此也对多线程有了更好的理解. 想很多新手一样,我其实犯了一个错误. 由于soket服务端端口监听用的 ...

  6. Mysql(1)——服务端与客户端建立连接

    Mysql不同于redis,它是一个关系型数据库,我们将数据库安装在linux系统上进行讲解. sudo apt-get install mysql-server命令可以在你的虚拟机上安装mysql服 ...

  7. 服务端判断客户端是移动端浏览器还是PC端浏览器

    在开发过程中,有时候业务要求需要对移动端和PC端分别处理,如果是移动端,那么返回页面A,如果是PC端,那么返回页面B,而判断浏览器是移动端还是PC端,我们一般通过user-agent判断,服务端和前端 ...

  8. java 判断客户端_javaweb服务端判断客户端使用的是手机还是电脑访问

    public class ToolCheckAgentIsMobile { private final static String[] agent = { "Android", & ...

  9. java mina 服务端_Mina客户端和服务端代码编写

    1.客户端 package com.boonya.protocol; import java.net.InetSocketAddress; import java.nio.charset.Charse ...

  10. C#Winform窗体实现服务端和客户端通信例子(TCP/IP)

    Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...

最新文章

  1. 窃隐私、放高利贷,输入法的骚操作真不少!
  2. cjson使用_LiteOS云端对接教程01-cJSON组件使用教程
  3. redis 清空缓存_「镜头回放」简直了!spring中清除redis缓存导致应用挂死
  4. Android sqlite数据库操作通用框架AHibernate(一)-CRUD示例和使用步骤
  5. elk平台分析nginx日志的基本搭建
  6. python编程软件哪个好-python IDE有哪些?哪个好用?
  7. matlab连续投影算法SPA使用示例
  8. mysql存储数据到cephfs_1.4 cephfs挂载
  9. 小黄鸡 php,小黄鸡simsimi接口
  10. python存根文件_python中的函数存根
  11. Redis连接池RedisPool使用
  12. 查询Linux中CPU的核数
  13. TP6助手函数使用示例
  14. 修炼打工皇帝不得不学的三招
  15. 爱点击ICLK.US增持畅移,深度协同催生更多增长机会
  16. Head First C#中文版 图文皆译 (page13)
  17. shader基础学习摘要(二) 兰伯特光照模型
  18. kali linux amd显卡驱动,AMD 显卡安装debian
  19. 【Python】批量对文件做downsample并且以指定名称保存到文件夹中
  20. ioctl命令及参数传递

热门文章

  1. vant组件做表格_有赞团队的vant ui组件库van-field使用
  2. DEP和ASLR的原理与破解
  3. 北京大学计算机学院课程表,北京大学课程表.PDF
  4. 计算机忘记密码WIN7,win7忘记密码强制重置方法
  5. jenkins下载插件下载不了,解决办法
  6. 建筑企业数字化转型关键问题及解决方案
  7. ArcCatalog导出数据库中shapefile
  8. 查看虚拟机ip地址的方法
  9. 博图注册表删除方法_win7系统鼠标右键刷新反应慢原因【解决方法】
  10. 好淘客饿了么返利系统-外卖返利优惠券系统-支持美团、饿了么的外卖和商超/电影票 支持多级代理返利