关于socket tcp 断线重连

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

  • 首先写一个最简易的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。用于新手学习之用。

 

 

 

 

源码下载

 

时间: 2024-10-14 22:55:14

关于socket tcp 断线重连的相关文章

C# socket断线重连等异常情况处理

问题描述 请教大家一个问题啊,现在做一个数据采集的软件,就是一个GPS模块通过GPRS以TCP的方式发送数据,我这边用socket异步多线程的方式(因为技术原因,采用的是一个GPS模块对应一个端口的方式)接收数据,现在数据都能接收存入数据库,请问如何解决例如断线重连这类异常的情况呢,比如说网络断了重新连接的话就报错.第一次贴代码,大家见谅usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.

基于TCP通信的客户端断线重连

转载:http://www.cnblogs.com/networkcomms/p/4304362.html 源码下载 在CS程序中,断线重连应该是一个常见的功能. 此处的断线重连主要指的是服务器端因为某种故障,服务器端程序或者系统进行了重新启动,客户端能够自动探测到服务器端掉线,并尝试重新进行连接 本程序基于来自英国的开源c#通信框架的networkcomms(2.3.1版本) 先看一下效果 初始状态: 当服务器端程序关闭后,客户端会自动探测到,并在客户端显示相关信息 然后,我们设定为每隔5秒重

通讯-C# 客户端连接服务器端如果断线重连

问题描述 C# 客户端连接服务器端如果断线重连 我现在设计的是一个客户端,连接了100台硬件,通讯协议采用的是Modbus tcp和FTP.如果中间一台硬件断线了,如何避免程序崩溃(我采用的是线程池)?还有断线后重新连接上后,程序能自动连接上,并上传数据?还望大神能够多多指教,初学很多东西都不懂. 解决方案 中间一台硬件断线了,如何避免程序崩溃(我采用的是线程池)? 用try catch或错误码做错误处理程序能自动连接上,程序主动去连接就可以了 解决方案二: 可以考虑用心跳包,时间长了重新连接

activemq-ActiveMQ的断线重连配置?

问题描述 ActiveMQ的断线重连配置? 请问这句话 failover:(tcp://127.0.0.1:61616) 应该在哪里怎样配置呢,刚开始学消息推送,希望能给点指导.

tcp-java中TCP怎么重连,发送数据?

问题描述 java中TCP怎么重连,发送数据? s = new Socket(this.getIp(),61111); pw = new PrintWriter(s.getOutputStream(),true); pw.println(str); pw.println(str2); pw.println(str3); 上面是部分TCP. 1.我用TCP发送数据,上面有3次发送.但是假设在 pw.println(str2);时断开了连接. 我想要重新连接S(不通过new Socket(.....

Windows 8 Store Apps学习(62) 通信: Socket TCP, Socket UDP

介绍 重新想象 Windows 8 Store Apps 之 通信 Socket - Tcp Demo Socket - 实现一个自定义的 http server Socket - Udp Demo 示例 1.演示 socket tcp 的应用(本例既做服务端又做客户端) Communication/Socket/TcpDemo.xaml <Page x:Class="XamlDemo.Communication.Socket.TcpDemo" xmlns="http:

centos-CentOS如何开机后自动连VPN 最好能够断线重连

问题描述 CentOS如何开机后自动连VPN 最好能够断线重连 在CentOS6.5上创建了一个VPN连接 每次开机之后需要敲命令 pppd call VPN 然后ifconfig查看有没有ppp0 有了之后再敲命令 route add -net 0.0.0.0 dev ppp0 我对Linux的命令一窍不通 哪位高手指导下 怎么设置 开机之后自动执行 pppd call VPN 连接到VPN 判断ppp0出现之后 再自动执行 route add -net 0.0.0.0 dev ppp0 同时

c++ 编程问题-c++与java通信(socket TCP)c++用的默认的编码,java用的UTF-8 怎么解决中文乱码问题

问题描述 c++与java通信(socket TCP)c++用的默认的编码,java用的UTF-8 怎么解决中文乱码问题 c++代码如下,谁可以试着尝试一下,谢谢 #include #include #include #pragma comment(lib,"ws2_32.lib") void main() { //创建套接字 WORD myVersionRequest; WSADATA wsaData; myVersionRequest=MAKEWORD(1,1); int err;

与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之通信 实例 - 基于 Socket TCP 开发一个多人聊天室 示例1.服务端ClientSocketP