如何在客户端方判断socket连接是否关闭

gqlao 2004-04-29 10:02:27
我用了socket的isconnected()来判断,然后在连接上服务器端后关闭服务端程序,那么连接应该是中断了吧,可是客户端的isconnected()仍然是true,请问在客户端方判断socket连接的状态应该用什么方法,谢谢。
...全文
449 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gqlao 2004-04-29
  • 打赏
  • 举报
回复
原来是这样,谢谢楼上各位给的清楚的说明!read抛出异常我知道是断开的,但本来我以为read返回-1并不是代表断开而只是没有收到包。这下解决了我一个大疑问了,谢谢!
ldbingshui 2004-04-29
  • 打赏
  • 举报
回复
检查异常阿
bigcrazy 2004-04-29
  • 打赏
  • 举报
回复
断开会抛出异常的。只需要捕捉异常就可以知道是否断开了。
darksmile 2004-04-29
  • 打赏
  • 举报
回复
正常情况下tcp连接被断开要经过3次握手,然后释放所有资源。这叫做雅致断开,这种情况下双方都知道连接已断开,所以read能够正常返回-1
但是由于网络程序的特殊性,有可能因为网络故障等原因造成不经过3次握手而强行断开,这种情况下双方可能不知道连接实际已经不存在了,所以read会抛出异常
一般这样处理:检查read的返回值,如果是-1则做断开处理,如果read时抛出IOException也做断开处理,如果read正常返回则做接收到数据的操作
gqlao 2004-04-29
  • 打赏
  • 举报
回复
谢谢楼上的解答

"如果连接被雅致断开,那么read返回-1"
这个何解?
darksmile 2004-04-29
  • 打赏
  • 举报
回复
isconnected表示连接是否成功,不能用来判断是否断开
java的socket都是阻塞的,只有一个办法用来判断是否断开:
用socket取得对应的InputStream,然后调用read
如果连接存在,而且有数据可读,那么read返回读出的数据
如果连接存在,但是没有数据可读,那么read将阻塞
如果连接被雅致断开,那么read返回-1
如果连接被强行断开,那么read抛出IO异常

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧