java 网络编程,如何检测对方关闭连接
最近看到这么一段话
出处:http://blog.csdn.net/ /archive/2009/01/05/3714667.aspx
第2个问题是对长连接的维护。所谓的维护包括两个方面,首先是检测对方的主动断
连(既调用Socket的close方法),其次是检测对方的宕机、异常退出及网络不
通。这是一个健壮的通信程序必须具备的。检测对方的主动断连很简单,主要
一方主动断连,另一方如果在进行读操作,则此时的返回值只-1,一旦检测到
对方断连,则应该主动关闭己方的连接(调用Socket的close方法)。而检测对
方的宕机、异常退出及网络不通常用方法是用“心跳”,也就是双方周期性的发送数
据给对方,同时也从对方接收“心跳”,如果连续几个周期都没有收到对方心跳,则
可以判断对方或者宕机或者异常推出或者网络不通,此时也需要主动关闭己方连接,如果
是客户端可在延迟一定时间后重新发起连接。虽然Socket有一个keep alive选项来维护连
接,如果用该选项,一般需要两个小时才能发现对方的宕机、异常退出及网络不通。
不知道这段话是否正确,socketchannel.read 方法里面的说明是,如果返回 -1 ,表示读取到了流的末尾,但是我认为不一定是对方关闭了连接...