关于socket tcp 断线重连

简介: 这个问题困扰过我几次,都没有来得及研究,今天研究一下。 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关闭程序时,客户端调用send函数发送失败,WSAGetLastError() 返回10054(远程主机强迫关闭了一个现有的连接)  (2)客户端已经连接,当客户端关闭程序时,服务端调用recv函数接收失败,WSAGetLastError() 返回10054(远程主机强迫关闭了一个现有的连接) ,这时对这个客户端的socket调用select函数时,会立即返回可读。

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

  • 首先写一个最简易的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天前
|
网络协议 Linux Windows
TCP/IP、Http、Socket之间的区别
TCP/IP、Http、Socket之间的区别
|
4月前
|
网络协议 安全 Java
Java网络编程入门指南:TCP/IP协议与Socket通信
Java网络编程入门指南:TCP/IP协议与Socket通信
55 1
|
网络协议 关系型数据库 MySQL
MySql解决办法:2004:Can't create TCP/IP socket (24)
MySql解决办法:2004:Can't create TCP/IP socket (24)
249 0
|
网络协议
如果希望监听TCP端口9000,服务器端应该怎样创建socket?
如果希望监听TCP端口9000,服务器端应该怎样创建socket?
905 1
|
机器学习/深度学习 网络协议 机器人
socket库:Python实现TCP/IP客户和服务器通信
socket库:Python实现TCP/IP客户和服务器通信
420 0
socket库:Python实现TCP/IP客户和服务器通信
|
存储 网络协议 Java
【Java】网络编程--Socket与TCP网络通信编程
文章目录 写在前面 1 Socket 2 TCP网络通信编程 2.1 TCP字节流编程 2.1.1 案例:客户端发送数据,服务端接收并显示 2.1.2 案例进阶:双向通信 2.2 TCP字符流编程 2.3 网络上传文件
【Java】网络编程--Socket与TCP网络通信编程
|
网络协议 Java 大数据
网络编程:socket—基于 TCP 协议编程|学习笔记
快速学习网络编程:socket—基于 TCP 协议编程
111 0
|
存储 网络协议 算法
|
域名解析 网络协议 安全
Java之初步识别网络编程:IP、端口号、TCP/UDP、Socket、URL等
Java之初步识别网络编程:IP、端口号、TCP/UDP、Socket、URL等
348 0
Java之初步识别网络编程:IP、端口号、TCP/UDP、Socket、URL等
|
开发框架 网络协议 Unix
socket,tcp,http三者之间的区别
socket,tcp,http三者之间的区别
109 0