TCP SOCKET 服务器如何判断客户端断开

u011110626 2013-07-14 11:35:11
客户端与服务器已建立连接
当客户端意外断开时
单从服务器端该如何判断客户端已断开?

不使用心跳包
...全文
2009 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2013-08-02
  • 打赏
  • 举报
回复
异常断开需要使用心跳机制去检测~
Squall_zy 2013-08-02
  • 打赏
  • 举报
回复
说的不太严谨,如果服务器不主动发数据,则无法判断对方是否依然连接。 这个在TCP/IP卷一中,有详细的说明。
Squall_zy 2013-08-02
  • 打赏
  • 举报
回复
无法判断。 除非你使用心跳包。
木头菇 2013-08-02
  • 打赏
  • 举报
回复
引用 7 楼 zqckzqck 的回复:
在阻塞模式下,怎么办???
与模式关系不大,阻塞模式函数返回了,必有事件发生或超时,非阻塞模式,去判断是不是WSAEWOULDBLOCK或者其他,做相应操作
木头菇 2013-08-02
  • 打赏
  • 举报
回复
引用 5 楼 u011110626 的回复:
2楼回答错误 recv()返回值为0 也有可能是连通了但是没有数据收发 在阻塞模式下 用返回值是判不到的
If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError. 试试去
夫人的泡泡鱼 2013-07-26
  • 打赏
  • 举报
回复
在阻塞模式下,怎么办???
琅琊榜 2013-07-25
  • 打赏
  • 举报
回复
recv=0或者-1的时候就是断开了
u011110626 2013-07-24
  • 打赏
  • 举报
回复
2楼回答错误 recv()返回值为0 也有可能是连通了但是没有数据收发 在阻塞模式下 用返回值是判不到的
xian_wwq 2013-07-19
  • 打赏
  • 举报
回复
不使用心跳维持链路的话,超时检测比较靠谱
氰客 2013-07-16
  • 打赏
  • 举报
回复
引用 2 楼 aiyoushang521 的回复:
如果recv()函数返回值为0,就说明断开连接了。。。
+ 1
纸-_-鸢 2013-07-15
  • 打赏
  • 举报
回复
如果recv()函数返回值为0,就说明断开连接了。。。
Xiaona_Song 2013-07-15
  • 打赏
  • 举报
回复
当你发送新的数据时,会收到RESET,你的程序收到关闭通知,这有很多socket例子,可以看看: http://download.csdn.net/detail/geoff08zhang/4571358

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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