Qt QTcpSocket断网重连(一)

您所在的位置:网站首页 tcp断网怎么办 Qt QTcpSocket断网重连(一)

Qt QTcpSocket断网重连(一)

2023-07-14 12:22| 来源: 网络整理| 查看: 265

在网络传输中,会出现各种各样的情况,在长链接的使用中断网重连机制就显得尤为重要了。

一、需要断网重连的情况

接收不到数据的情况(网络闪断)接收到数据为空

二、断网检查方式

通过接收到数据是否 qDebug() bool b_recv_flag = false; if (!m_TcpSocket) { m_TcpSocket = new QTcpSocket(); connect(m_TcpSocket, SIGNAL(readyRead()), this, SLOT(onReadMsg()),Qt::DirectConnection);//让接受函数在run子线程中执行(发送者执行) connect(m_TcpSocket, SIGNAL(connected()), this, SLOT(onConnect())); connect(m_TcpSocket, SIGNAL(disconnected()), this, SLOT(onDisConnect())); } while (!m_isThreaStopped) { //检测客户端 socket指针是否为空 if(b_recv_flag) msleep(100); if (!m_isOkConect) { // 终止当前连接并重置套接字(立即关闭套接字,丢弃写缓冲区中的任何挂起数据) m_TcpSocket->abort(); m_TcpSocket->connectToHost(m_QStrSocketIp, m_nSockPort); //等待连接。。。延时三秒,三秒内连不上返回false m_isOkConect = m_TcpSocket->waitForConnected(3000); m_iRecv_TimeOut = -1; } if (!m_isOkConect) { msleep(1); continue; } else { qDebug() m_iRecv_TimeOut++; if(m_iRecv_TimeOut>150) m_iRecv_TimeOut=150; } if(m_iRecv_TimeOut >= 150) { m_iRecv_TimeOut = -1; m_TcpSocket->disconnectFromHost(); } } qDebug() m_QStrSocketIp = ip; m_nSockPort = port; m_isThreaStopped = false; start(); } void TcpThread::stopThreaad() { qDebug() if(m_TcpSocket->bytesAvailable() // 接收数据 m_datagram.clear(); m_datagram.resize(m_TcpSocket->bytesAvailable()); m_TcpSocket->read(m_datagram.data(), m_datagram.size()); QString str_tcp_receive = QString::fromLocal8Bit(m_datagram); msleep(100); } } void TcpThread::onSendTcp() { if((!m_TcpSocket)||m_TcpSocket->state()!=QAbstractSocket::ConnectedState) return; QString str_info = ""; m_iSendData = m_TcpSocket->write(str_info.toStdString().c_str(), strlen(str_info.toStdString().c_str())); m_TcpSocket->flush(); if (m_iSendData


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3