TCP服务器断开连接自动重联机制

客户端加入定时器实现断线重联(客户端服务端代码见上一篇博客)

编译环境:Qt 5.9.5

ui界面如图:

代码如下

tcpclient.h

#ifndef TCPCLIENT_H
#define TCPCLIENT_H#include <QWidget>
#include <QTcpSocket>
#include <QTimer>
#include <iostream>
#include <string>
using namespace std;namespace Ui {
class TcpClient;
}class TcpClient : public QWidget
{Q_OBJECTpublic:explicit TcpClient(QWidget *parent = 0);~TcpClient();protected:void newTcpConnect();void init();private slots://void on_pushButtonEnter_clicked();void slotconnectedsuccess();  //处理连接成功的信号void slotreceive();   //接收服务器传过来的信息void on_pushButtonSend_clicked();void slotdisconnected();  //处理离开聊天室的信号void slotTimeout();  //处理timeou信号void connectButton();private:Ui::TcpClient *ui;bool status;     //用来判断是否进入了服务器size_t strSize;int port;QHostAddress *serverIP;QString userName;QTcpSocket *tcpsocket;QTimer m_timer;};#endif // TCPCLIENT_H

tcpclient.cpp

#include "tcpclient.h"
#include "ui_tcpclient.h"
#include <QHostAddress>
#include <QMessageBox>
#include <QDebug>TcpClient::TcpClient(QWidget *parent) :QWidget(parent),ui(new Ui::TcpClient)
{ui->setupUi(this);//将进入服务器的标志位置为falsestatus = false;//未连接内不能发送信息ui->pushButtonSend->setEnabled(false);init();
}TcpClient::~TcpClient()
{delete ui;
}void TcpClient::init()
{port = 8888;ui->lineEditServerPort->setText(QString::number(port));QString ip = ui->lineEditServerIp->text();userName = ui->lineEditUserName->text();tcpsocket = new QTcpSocket(this);//tcpsocket->connectToHost(ip, port);connect(ui->pushButtonEnter, &QPushButton::clicked, this, &TcpClient::connectButton);connect(tcpsocket, &QTcpSocket::connected, this, &TcpClient::slotconnectedsuccess);connect(tcpsocket, &QTcpSocket::readyRead, this, &TcpClient::slotreceive);connect(tcpsocket, &QTcpSocket::disconnected, this, &TcpClient::slotdisconnected);connect(&m_timer, &QTimer::timeout, this, &TcpClient::slotTimeout);}void TcpClient::connectButton()
{if(ui->pushButtonEnter->text() == "连接服务器") {newTcpConnect();//tcpsocket->disconnectFromHost();}else if(ui->pushButtonEnter->text() == "离开服务器") {tcpsocket->disconnectFromHost();//newTcpConnect();}
}//用来处理连接成功的信号
void TcpClient::slotconnectedsuccess()
{m_timer.stop();   //连接成功后定时器停止status = true;ui->textEdit->append("连接成功");ui->pushButtonSend->setEnabled(true);ui->pushButtonEnter->setText("离开服务器");   QString msg = userName + ": connected";tcpsocket->write(msg.toUtf8().data());
}void TcpClient::slotreceive()
{QByteArray array = tcpsocket->readAll();QString strHead = QString(array).section("  ", 0, 0);QString strText = QString(array).section("  ", 1, 1);QString buf = userName + ":";if(strHead == buf) {ui->textEdit->append(buf + strText);}}void TcpClient::on_pushButtonSend_clicked()
{//获取编辑区内容QString str = ui->lineEditSend->text();//加头信息qint64 textSize = str.size();QString strHead = QString("%1##%2##%3").arg(userName + ": ").arg(textSize).arg(str);tcpsocket->write(strHead.toUtf8().data());ui->lineEditSend->clear();
}void TcpClient::slotdisconnected()
{   m_timer.start(2000);    //连接断开时开启定时器,定时时间为2sstatus == false;ui->textEdit->append("断开连接");ui->pushButtonSend->setEnabled(false);ui->pushButtonEnter->setText("连接服务器");}void TcpClient::slotTimeout()
{qDebug() << "重联服务器222222222";if(status == true) {qDebug() << "重联服务器";ui->textEdit->append("重联服务器...");newTcpConnect();}
}void TcpClient::newTcpConnect()
{tcpsocket->abort();port = 8888;ui->lineEditServerPort->setText(QString::number(port));QString ip = ui->lineEditServerIp->text();tcpsocket->connectToHost(ip, port);if (!tcpsocket->waitForConnected(3000)) {//连接时长为3s,超过3秒连不上则输出错误信息//QMessageBox::warning(this, "错误", "连接超时");}}

[Qt] TCP客户端与服务器断开连接自动重联机制相关推荐

  1. android tcp判断服务器是否断开,Android tcp客户端连接,然后从java服务器断开连接...

    我在我的电脑上执行java服务器并让我的android设备连接到它.我可以连接它,但一旦连接就会断开连接.我确信在android方面我需要做一些事情,但我很少迷失它.我有互联网许可,所以很好.Andr ...

  2. Qt开发的TCP客户端和服务器

    前言 自己写的demo测试程序,已通过网络调试助手验证程序是可行的,该程序界面可以切换TCP客户端和服务器,可以接收和发送信息到网络调试助手,可以切换不同的语言,项目下载地址:https://down ...

  3. MQTT客户端连接服务器协议,mqtt客户端和服务器长连接

    mqtt客户端和服务器长连接 内容精选 换一换 介绍设置客户端和服务器的安全认证方式的相关参数.参数说明:表明与服务器建立链接后,不进行任何操作的最长时间.参数类型:USERSET取值范围:整型,0- ...

  4. cf服务器断开连接不稳定,cf与服务器断开连接

    cf与服务器断开连接 内容精选 换一换 已获取服务器管理员帐号与密码.打开CMD运行窗口,输入gpedit.msc,打开本地组策略编辑器.打开组策略在指定RD会话主机服务器的授权模式下拉列表中选择按用 ...

  5. ol2与服务器连接中断,与服务器断开连接

    2009-08-06 总是服务器断开连接.... 极限封测服务器延迟开放公告 尊敬的玩家 为了保证服务器的稳定运行与游戏质量,同时解决部分玩家由于自动更新异常而无法正常登陆<宠物小精灵OL> ...

  6. 系统与服务器断开了连接不上,win7系统电脑玩跑跑卡丁车出现与服务器断开连接的解决方法...

    win7系统使用久了,好多网友反馈说win7系统电脑玩跑跑卡丁车出现与服务器断开连接的问题,非常不方便.有什么办法可以永久解决win7系统电脑玩跑跑卡丁车出现与服务器断开连接的问题,面对win7系统电 ...

  7. Linux C语言实现TCP客户端与服务器

    本文中的TCP server 和 client,为基于软件层面(TCP/IP协议栈)的Socket应用开发. 一.Socket 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可 ...

  8. C3P0,Proxool,BoneCP,Druid等连接池的断开自动重联功能

    数据库连接池的断开自动重联.失败恢复功能显得很重要,不知道目前主流的数据库连接池:C3P0,Proxool,BoneCP,Druid等支持如何? 我知道的: Proxool: ? 1 2 3 4 5 ...

  9. qq炫舞显示服务器断开,快速还原win7系统玩QQ炫舞老是掉线提示与服务器断开连接的处理次序...

    许多win7系统用户在工作中经常会遇到win7系统玩QQ炫舞老是掉线提示与服务器断开连接的情况,比如近日有用户到本站反映说win7系统玩QQ炫舞老是掉线提示与服务器断开连接的问题,但是却不知道要怎么解 ...

最新文章

  1. vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题
  2. 超阿里、大华,澎思科技行人再识别(ReID)技术刷新三大数据集记录
  3. 算法分析 载货问题_协会发布 | 汽车市场走势分析及2021年预测报告
  4. 19图的搜索算法总结与比较
  5. 基于ROS的人脸识别
  6. django admin search_fields
  7. 【Java学习笔记】字符串和Date的转换
  8. linux mysql软件_「Linux」 - 常用软件安装-MySql
  9. jenkins学习笔记2-在centos中安装jenkins master测试环境
  10. html5开发之ios屏幕适配,iOS开发屏幕尺寸以及屏幕适配等问题(转载内容)
  11. 第十五回(二):文会内战平分秋色 树下阔论使坏心焦【林大帅作品】
  12. firefox ie 鼠标事件 坐标 兼容问题
  13. 爬虫_抓取京东手机图片
  14. html制作幸运抽奖,基于canvas的jQuery幸运抽奖大轮盘插件
  15. Struts2项目实战 微云盘(七):文件上传下载
  16. excel文件被写保护怎么解除_实用解除常用文件word、excel的写保护
  17. 微型计算机常用的输入设备分别是,微型计算机常见的基本输入输出设备有哪些?...
  18. 日语动词的13种变形
  19. CSS基础教程(下)
  20. 大屏用户有福了,vivo大屏旗舰被“猪队友”爆光,售价9999元?

热门文章

  1. Direct3D 12 尝鲜(二): Fence
  2. 位移运算(左移,右移)
  3. python中左对齐问题_[Python] print中的左右对齐问题
  4. 淘宝店小蜜配置手册——店小蜜收费策略及应对方案
  5. 求与下面谓词公式等值的前束范式_离散数学课后答案
  6. Android Q适配攻略(一)(图标适配)
  7. HDU 5976 Detachment(数学+结论)
  8. python随机生成无序列表_python实现无序列表:链表
  9. (转)爱剪辑学习记录_快速剪辑视频
  10. PLSQL-Developer工具