struct sockaddr_in TempSadd;

         TempSadd.sin_family = AF_INET;

         TempSadd.sin_port = htons(m_ServerPort);

         TempSadd.sin_addr.s_addr = inet_addr(m_ServerIp.c_str());

         if (- == ::connect(m_Socket, (sockaddr*)& TempSadd, sizeof(TempSadd)))
{
MiniConsole::getInstance().Output("重新连接服务器 Failed connect(),Error=<%d>\n", WSAGetLastError());
MiLOG::Instance()->OutputError("重新连接服务器Failed connect(),Error=<%d>\n", WSAGetLastError());
MiniConsole::getInstance().Output("ServerIp:%s port:%d \n", m_ServerIp.c_str(), m_ServerPort);
closesocket(m_Socket); m_bConnectState = false; }
else //*********连接成功,可以开始发送、接收************
{ m_bConnectState = true; MiniConsole::getInstance().Output("③连接成功服务器IP地址:<%s>,端口号<%d>\n", inet_ntoa(Sadd.sin_addr), ntohs(Sadd.sin_port));
MiLOG::Instance()->OutputSuccess("③连接成功服务器IP地址:<%s>,端口号<%d>\n", inet_ntoa(Sadd.sin_addr), ntohs(Sadd.sin_port)); }

这里有个坑

int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);

ret-成功返回0 失败返回-
connect函数是把当前套接字从CLOSED状态转移到SYN_SENT状态,若成功则再转移到ESTABLISHED状态。
若connect失败则该套接字不再可用,必须关闭,我们不能对这样的套接字再次调用connect函数。
当循环调用connect为给定主机尝试各个ip地址直到有一个成功时,在每次connect之后,都必须close当前套接字,并重新调用socket;

TCP断线重连的更多相关文章

  1. 关于socket tcp 断线重连

    这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...

  2. 发现电脑上装着liteide,就用golang做一个TCP通讯测试(支持先启动client端和断线重连)

    1.参考https://www.cnblogs.com/yin5th/p/9274495.html server端 main.go package main import ( "fmt&qu ...

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

    转载:http://www.cnblogs.com/networkcomms/p/4304362.html 源码下载 在CS程序中,断线重连应该是一个常见的功能. 此处的断线重连主要指的是服务器端因为 ...

  4. netty4 断线重连

    转载:http://www.tuicool.com/articles/B7RzMbY 一 实现心跳检测 原理:当服务端每隔一段时间就会向客户端发送心跳包,客户端收到心跳包后同样也会回一个心跳包给服务端 ...

  5. ActiveMQ的断线重连机制

    断线重连机制是ActiveMQ的高可用性具体体现之一.ActiveMQ提供failover机制去实现断线重连的高可用性,可以使得连接断开之后,不断的重试连接到一个或多个brokerURL. 默认情况下 ...

  6. Netty断线重连

    Netty断线重连 最近使用Netty开发一个中转服务,需要一直保持与Server端的连接,网络中断后需要可以自动重连,查询官网资料,实现方案很简单,核心思想是在channelUnregistered ...

  7. 浅谈IM软件client的断线重连、心跳和长在线

    版权声明:原创文章,未经博主同意禁止转载.欢迎点击头像上方"郭晓东的专栏"查看专栏 https://blog.csdn.net/hherima/article/details/27 ...

  8. socket 断线重连

    send发送数据时,发送失败,进行如下重连处理: ) < )//serbuf中有数据可以发送才会执行这条语句 { printf("serial to tcp send msg erro ...

  9. android 实现mqtt消息推送,以及不停断线重连的问题解决

    前段时间项目用到mqtt的消息推送,整理一下代码,代码的原型是网上找的,具体哪个地址已经忘记了. 代码的实现是新建了一个MyMqttService,全部功能都在里面实现,包括连服务器,断线重连,订阅消 ...

随机推荐

  1. HTML5:在移动端禁用长按选中文本功能

    很多时候,我们在写的手机页面需要用户进行长按然后响应一个事件.但是在微信中用户的长按操作被默认为谈出来一个复制的选项.那么这个时候如何去禁止这个东西呢? 其实很简单,方法看下面: 只需要在你需要禁止的 ...

  2. npm install 提示权限不足 Error: EPERM: operation not permitted, unlink XXX

    问题 使用npm install时提示权限不足 原因 这里原因有两个: 没有管理员权限访问C盘下npm路径导致下载失败. NPM官网没有下载权限. 解决方案 第一原因 这里可以使用管理员身份执行以下命 ...

  3. FZU2279 : Cantonese

    首先把相同的事件点合并,那么每个点有时间$t_i$,位置$x_i$,价值$v_i$. 考虑DP,设$f_i$表示按时间从小到大考虑每个事件,目前位于事件$i$的时间与位置时,最多能让多少个事件发生.在 ...

  4. Java 构造器 通过私有构造器强化不可实例化的能力

    只有当类不包含显式的构造器时,编译器才会生成一个公有的.无参的缺省构造器.只要让一个类包含私有构造器,这个类就不能被实例化了.示例: // 工具类 public class UtilityClass ...

  5. H5C304

    H5C304 1.渐变 1)线性渐变 point,angle可取4个值:如上所示 需要使用background添加 2)径向渐变 position是按照元素右上为原点的 3)重复渐变 同样有重复线性渐 ...

  6. Ajax发送请求,并接受字符串

    前台: $.ajax({ type: 'POST', url: url, dataType: "json", success : function(data){ alert(&qu ...

  7. poj3617 Best Cow Line(贪心,字典序问题)

    https://vjudge.net/problem/POJ-3617 这类字符串处理字典序问题经常用到贪心, 每决定输出一个字符之前,都要前后i++,j--逐个比大小,直至比出为止. #includ ...

  8. OCR库Tesseract初探

    1.Tesseract 安装及使用 一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎,与Microsoft Off ...

  9. SOLDI原则之DIP:依赖倒置原则

    本篇介绍软件设计原则之一DIP:依赖倒置原则.很多知识回头来看会有新的理解.看到一句话,一段文字,一个观点有了新的理解,醍醐灌顶的感觉.这种感觉像是一种惊喜.古语说:温故而知新. DIP:依赖倒置原则 ...

  10. C# CancellationTokenSource和CancellationToken的实现

    微软关于CancellationTokenSource的介绍很简单,其实CancellationTokenSource的使用也很简单,但是实现就不是那么简单了,我们首先来看看CancellationT ...