关于socket tcp 断线重连
2017-04-16 15:49
387 查看
这个问题困扰过我几次,都没有来得及研究,今天研究一下。
首先写一个最简易的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。用于新手学习之用。
源码下载
首先写一个最简易的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。用于新手学习之用。
源码下载
相关文章推荐
- 关于socket tcp 断线重连
- 关于TCP Socket 非阻塞模式时客户端connect返回SOCKET_ERROR的情况
- WCF基础: 关于Socket.TCP.UDP
- 关于TCP下SOCKET的一些测试
- c#socket异步编程和断线重连
- 关于socket tcp/ip的理解
- 关于检测SOCKET的异常断线
- 关于linux下的TCP 的socket server和client,我的理解
- 基于TCP通信的客户端断线重连
- 【c#源码】基于TCP通信的客户端断线重连
- 关于网页游戏断线重连的思路和demo求助
- 关于socket断线处理的两种机制
- 基于TCP的socket编程网络掉线重连
- 关于 :TCP/IP、Http、Socket的区别
- [转]关于AS3 Socket和TCP不得不说的三两事
- 关于TcpClient,Socket连接超时的几种处理方法
- JAVA 里关于几个 SocketTimeoutException 对应TCP的状态 for linux
- 关于Socket、TCP、Http之间的关系
- 关于socket应用:一个不断监听一个进程的服务器以及发送信息的客户端 TCP的三次握手和四次挥手