关于sockettcp断线重连
这个问题困扰过我⼏次,都没有来得及研究,今天研究⼀下。
⾸先写⼀个最简易的socket tcp程序,连接成功后再关闭服务器然后再⽤客户端各种操作看是什么情况
测试表明
(1)客户端已经连接,当服务端关闭程序时,客户端调⽤send函数发送失败,WSAGetLastError() 返回10054(远程主机强迫关闭了⼀个现有的连接)
(2)客户端已经连接,当客户端关闭程序时,服务端调⽤recv函数接收失败,WSAGetLastError() 返回10054(远程主机强迫关闭了⼀个现有的连接) ,这时对这个客户端的socket调⽤select函数时,会⽴即返回可读。recv函数
(3)客户端已经连接,当服务端关闭程序时,客户端调⽤recv函数接收失败,WSAGetLastError() 返回10054
(4)WSAAsyncSelect模式的服务端,当客户端软件关闭时,服务器收到的消息为FD_CLOSE,错误代码为10053(您的主机中的软件中⽌了⼀个已建⽴的连接)
关于客户端断线重连
粗略的做法是,当客户端调⽤send或recv失败,然后WSAGetLastError()判断错误编号,然后关闭socket。再创建⼀个socket。然后进⾏connect操作。
下⾯附上我写的⼀个基于socket流式套接字的源码服务端⽀持⼀对多聊天。socket相关通信都是⽤windows api。⽤于新⼿学习之⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论