socket如何发现对方执行了close

谁学逆向工程 2016-10-17 04:51:04
假设一个TCP服务器和5个客户端通信,5次 accept 之后返回5个 socket,如果一个客户端通信完毕执行了close,那么我服务器如何发现他执行了close呢,发现之后服务器也要执行socket 的 close。
...全文
293 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
达人游戏男孩 2016-10-20
  • 打赏
  • 举报
回复
引用 9 楼 xiaoyuanyuan2009 的回复:
[quote=引用 8 楼 u013559751 的回复:] catch里面写上断开或者remove的代码就好了
remove是什么,不是close吗[/quote] 不用close,如果发现发送失败的时候其实就已经colse了,我说的remove只是说把存在放缓存中的相关保存此soket的信息移除,不管是保存在缓存也好还是数据库的也好
谁学逆向工程 2016-10-18
  • 打赏
  • 举报
回复
引用 3 楼 ggaofengg 的回复:
你自己写个小程序,做个小实验就知道了。
你会收到一个对方已经close的异常的。

是read 函数的这几个异常吗
肃穆丶 2016-10-18
  • 打赏
  • 举报
回复
楼上+1
谁学逆向工程 2016-10-18
  • 打赏
  • 举报
回复
引用 8 楼 u013559751 的回复:
catch里面写上断开或者remove的代码就好了
remove是什么,不是close吗
达人游戏男孩 2016-10-18
  • 打赏
  • 举报
回复
不用做心跳包吧,直接在发送消息的时候try catch下,如果发送没有成功就说明断开了,catch里面写上断开或者remove的代码就好了,何必管它是不是一直在连接的呢?
  • 打赏
  • 举报
回复
我一直以为Socket把这些都整好了……天哪!
NewMoons 2016-10-18
  • 打赏
  • 举报
回复
我同意3楼的说法。
ggaofeng 2016-10-17
  • 打赏
  • 举报
回复
你自己写个小程序,做个小实验就知道了。 你会收到一个对方已经close的异常的。 但是,如果是对方的机器突然断电,或者网线突然被拔掉,是没有这个异常的。 这种情况就需要采用心跳机制。心跳是需要应用层自己做的,即通信的双方每隔几秒发送一个消息,告知对方“我活着”。如果一方在几个周期内没有收到对方的消息,就说明对方挂了。
谁学逆向工程 2016-10-17
  • 打赏
  • 举报
回复
引用 1 楼 tianyutaizi 的回复:
所以就有了心跳包的出现
这是什么类
-天宇 2016-10-17
  • 打赏
  • 举报
回复
所以就有了心跳包的出现

62,628

社区成员

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

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