这个问题困扰过我几次,都没有来得及研究,今天研究一下。

  • 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况

测试表明

(1)客户端已经连接,当服务端关闭程序时,客户端调用send函数发送失败,WSAGetLastError() 返回10054(远程主机强迫关闭了一个现有的连接)

(2)客户端已经连接,当客户端关闭程序时,服务端调用recv函数接收失败,WSAGetLastError() 返回10054(远程主机强迫关闭了一个现有的连接) ,这时对这个客户端的socket调用select函数时,会立即返回可读。

(3)客户端已经连接,当服务端关闭程序时,客户端调用recv函数接收失败,WSAGetLastError() 返回10054

(4)WSAAsyncSelect模式的服务端,当客户端软件关闭时,服务器收到的消息为FD_CLOSE,错误代码为10053(您的主机中的软件中止了一个已建立的连接)

  • 关于客户端断线重连

粗略的做法是,当客户端调用send或recv失败,然后WSAGetLastError()判断错误编号,然后关闭socket。再创建一个socket。然后进行connect操作。

下面附上我写的一个基于socket流式套接字的源码服务端支持一对多聊天。socket相关通信都是用windows api。用于新手学习之用。

源码下载

最新文章

  1. JavaScript移除绑定在元素上的匿名事件处理函数
  2. TTTAttributedLabel xib sb lineSpacing not working
  3. SpringMVC操作指南-登录功能与请求过滤
  4. 夺命雷公狗-----React---28--小案例之react经典案例todos(全选和反选)完
  5. angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)
  6. 【原】iOS学习之在NSObject子类中获取当前屏幕显示的ViewController
  7. mysql添加外键错误
  8. IOS MenuController初步了解
  9. beta阶段140字评论
  10. 使用 Linux 搭建 VPN
  11. sql 语句 截取字符串的两种方案
  12. POJ 2756 Autumn is a Genius 大数加减法
  13. 裸机LCD驱动配置
  14. SocketServer源码学习(二)
  15. maxSubArray
  16. 【基于url权限管理 shiro(一)】--基础
  17. Django3 Django 路由分发,反向解析,2.0版本的path
  18. SQL Server -- 回忆笔记(三):ADO.NET之C#操作数据库
  19. python的库小全
  20. Python3+Scapy安装使用教程

热门文章

  1. JFreeChart在制作折线图
  2. 天天模拟器 和 Genymotion 设置代理
  3. Mac下使用Automator实现截屏编辑保存
  4. Linux 中open系统调用实现原理【转】
  5. 在Linux下搭建Git服务器的方法是什么样?
  6. iOS 第一次安装应用,拒绝相机调用,页面卡死的解决方案
  7. Nginx使用手册目录
  8. JS删除script标签
  9. 开源数据库连接池proxool
  10. java中文件的读取和写入