isconnected表示连接是否成功,不能用来判断是否断开
java的socket都是阻塞的,只有一个办法用来判断是否断开:
用socket取得对应的InputStream,然后调用read
如果连接存在,而且有数据可读,那么read返回读出的数据
如果连接存在,但是没有数据可读,那么read将阻塞
如果连接被雅致断开,那么read返回-1
如果连接被强行断开,那么read抛出IO异常
java的socket都是阻塞的,只有一个办法用来判断是否断开:
用socket取得对应的InputStream,然后调用read
如果连接存在,而且有数据可读,那么read返回读出的数据
如果连接存在,但是没有数据可读,那么read将阻塞
如果连接被雅致断开,那么read返回-1
如果连接被强行断开,那么read抛出IO异常
这个何解?
但是由于网络程序的特殊性,有可能因为网络故障等原因造成不经过3次握手而强行断开,这种情况下双方可能不知道连接实际已经不存在了,所以read会抛出异常
一般这样处理:检查read的返回值,如果是-1则做断开处理,如果read时抛出IOException也做断开处理,如果read正常返回则做接收到数据的操作