判断对方是否断开连接:
一、方法层面的实现:
1,使用输入流的read方法:
输入流的read(byte[] ,int ,int) 方法,表示从当前的通道中读取数据,具体读取到的数据有返回的int值决定;这里的返回值和抛出的异常很重要,如果抛出IOException异常,很明显连接已经断开;
返回值说明:
针对于基于tcp/ip协议的socket连接说明:
如果没有设置socket的soTimeout属性,那么该方法将是一个阻塞方法,可以通过设置socket的soTimeout属性,让read方法退出。
注意:read方法如果timeout将以抛出socketTimeoutException异常;
客户端:
如果对方断开连接,客户端的read方法将返回-1;
服务器端:
如果对方断开连接,服务器端的read方法将抛出IOException异常;
提示:
建议使用这种方式,netty底层源码就是使用的这种方式实现的;
2,使用socket 的sendUrgentData(int) :
注意:不建议使用此种方式,因为使用该方式有很多不可预测的情况;
通常情况是:接收端没有开启socket的SO_OOBINLINE属性,那么使用sendUrgentData(int)测试连接时,在发送17次(windows测试数据)时会发生异常;而如果接收端