当前位置: 首页 > news >正文

QT/C++ TCP/IP服务端程序

适用于Linux和Windows,QT4/QT5,且实测不会阻塞崩溃。

.h文件


#include <QObject>
#include <QThread>
#include <QString>
#include <QDebug>
#include <QTcpSocket>
#include <QHostAddress>
#include <QByteArray>//#define _Linux
#define _Win#ifdef _Linux
#include <unistd.h>
#else
#include <windows.h>
#endifenum MessageType{ConnectRequest,ConnectSuccess,DisConnect,DataRequest};class TCPSocketThread : public QObject
{Q_OBJECT
public:explicit TCPSocketThread(QObject *parent = nullptr);~TCPSocketThread(void);void setFlag(bool flag = true);private:QTcpSocket *mTcpSocket;bool isStop;bool isConnected;void ConnectServer();public slots:void doWork();void writeData(QString str);private slots:void readData();void ConnectedSuccess();void disConnectedSuccess();void onError(QAbstractSocket::SocketError);signals:void signal_connectsuccess(QString str);void signal_back(QString str);
};

.cpp


#include "tcpsocketthread.h"#include <QApplication>TCPSocketThread::TCPSocketThread(QObject *parent) : QObject(parent)
{isStop = false;isConnected = false;mTcpSocket = new QTcpSocket(this);connect(mTcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(onError(QAbstractSocket::SocketError)));connect(mTcpSocket,SIGNAL(connected()),this,SLOT(ConnectedSuccess()));connect(mTcpSocket,SIGNAL(disconnected()),this,SLOT(disConnectedSuccess()));connect(mTcpSocket,SIGNAL(readyRead()),this,SLOT(readData()));
}TCPSocketThread::~TCPSocketThread(void)
{
}void TCPSocketThread::doWork()
{while(!isStop){if(!isConnected)ConnectServer();QApplication::processEvents();}
}void TCPSocketThread::setFlag(bool flag)
{isStop = flag;
}void TCPSocketThread::ConnectServer()
{QString serverIp = "192.168.137.10";qint16 serverPort = 1234;mTcpSocket->abort();mTcpSocket->connectToHost(QHostAddress(serverIp),serverPort);mTcpSocket->waitForConnected();
}void TCPSocketThread::ConnectedSuccess()
{isConnected = true;emit signal_connectsuccess("connected");
}
void TCPSocketThread::disConnectedSuccess()
{isConnected = false;emit signal_connectsuccess("disconnected");
}
void TCPSocketThread::onError(QAbstractSocket::SocketError)
{emit signal_connectsuccess(mTcpSocket->errorString());
}
void TCPSocketThread::writeData(QString str)
{//qDebug() << "write";mTcpSocket->write(str.toUtf8());// mTcpSocket->waitForBytesWritten();
}
void TCPSocketThread::readData()
{//qDebug() << "read";QByteArray buf = mTcpSocket->readAll();//mTcpSocket->waitForReadyRead();if(buf.size() < 1)return;emit signal_back(buf.data());
}

主线程:


tcpClient::tcpClient(QWidget *parent, Qt::WFlags flags): QWidget(parent, flags)
{ui.setupUi(this);mTcpSocketThread = new TCPSocketThread();mThread = new QThread();mTcpSocketThread->setParent(nullptr);mTcpSocketThread->moveToThread(mThread);connect(this,SIGNAL(StartThread()),mTcpSocketThread, SLOT(doWork()));connect(this,SIGNAL(signal_write()),mTcpSocketThread, SLOT(writeData()));connect(mTcpSocketThread,SIGNAL(signal_connectsuccess()),this,SLOT(slot_handle_state()));connect(mTcpSocketThread,SIGNAL(signal_back()),this,SLOT(slot_handle_data()));if(!mThread->isRunning()){mTcpSocketThread->setFlag(false);mThread->start();emit StartThread();//enter thread}
}

http://www.dtcms.com/a/492203.html

相关文章:

  • Linux-> TCP 编程3
  • 前端的学习与实战(一)
  • 优惠的网站建设百度竞价推广开户多少钱
  • LeNet网络
  • vivo官网网站服务中心庆阳网警
  • 闽清县城乡建设局网站网站访客qq统计系统
  • 使用NVIDIA cuVS优化向量搜索:从索引构建到实时检索
  • 高端网站制作物流案例网站
  • MySQL触发器
  • 无备案网站广告如何做seo优化排名营销
  • 做国际网站每年要多少钱这么注册免费网站
  • Linux中异常初始化和门设置函数的实现
  • tritonserver的docker镜像中运行onnxruntime-gpu,报错segmentationfault
  • 毕业答辩企业网站开发的问题创作平台有哪些
  • 客户推广渠道有哪些seo高端培训
  • AWS Glue中查询一个月的数据条数
  • 自助网站制作系统源码网络热词2022流行语及解释
  • 手机网站跟pc网站有什么不同中国人做的比较好的shopify网站
  • Rust 实战六 | 利用 winres 配置应用程序的图标
  • 通过docker、docker-compose方式安装部署zabbix7.0 LTS监控平台
  • 建设企业网站电话是多少广州市 网站建设 有限公司
  • 外贸网站建设可以吗网站开发流程心得体会
  • 网站内页产品做跳转安徽省建设工程招标网官网
  • 网站开发财务网站建设口号
  • 郑州企业建站系统模板电子商务网站建设属性
  • GroundingDINO安装报错合集解决
  • 具有价值的网站建设平台网站建设的流程分析
  • 国外网站推广平台有哪些?多用户建站平台
  • FastbuildAI新建套餐-前端代码分析
  • 网站建好了还需要什么维护扬中网站推广托管