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

【qt】多线程

实现服务端多线程来处理多个客户端
使用之前写过的服务端的代码
在这里插入图片描述
此时我们不需要connect,和serverrecv,因为我们需要在自己实现的多线程里面处理不同客户端的请求

步骤

1.增加线程类
在这里插入图片描述
在这里插入图片描述
2.线程执行
在这里插入图片描述
3.实现run函数
run函数的作用就是处理不同的客户端,当不同客户端发来数据,服务端就会有信号,所以这个函数里面实现的就是之前写过的connect函数
在这里插入图片描述
在这里插入图片描述
4.实现serverrecv
这个函数的作用就是将客户端发送来的数据读取上来,但是这里无法读到文本框中,因为ui界面是widget控制的,所以我们只能把读到的消息打印在debug中
在这里插入图片描述

梳理

在这里插入图片描述

源码

qtthread.h

#ifndef QTTHREAD_H
#define QTTHREAD_H#include <QObject>
#include<QThread>
#include<QTcpSocket>
#include<QDebug>class qtthread : public QObject
{Q_OBJECT
public:explicit qtthread(QTcpSocket*s,QObject *parent = nullptr);void run();void serverrecv();
signals:private:QTcpSocket* s;};#endif // QTTHREAD_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTcpSocket>
#include<QTcpServer>
#include<qtthread.h>
//#include<QThread>
#define PORT 8080
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
private slots:void deal();// void serverrecv();private:Ui::Widget *ui;QTcpServer *server;
};
#endif // WIDGET_H

qthread.cpp

#include "qtthread.h"qtthread::qtthread(QTcpSocket *socket, QObject *parent) : QObject(parent)
{s=socket;
}
void qtthread :: run()
{connect(s,&QTcpSocket::readyRead,this,&qtthread::serverrecv);}
void qtthread ::serverrecv()
{qDebug()<<s->readAll();}

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);server=new QTcpServer;server->listen(QHostAddress::AnyIPv4,PORT);connect(server,&QTcpServer::newConnection,this,&Widget::deal);
}Widget::~Widget()
{delete ui;
}
void Widget::deal()
{QTcpSocket* socket=server->nextPendingConnection();ui->clientip->setText(socket->peerAddress().toString());ui->clientport->setText(QString::number(socket->peerPort()));// connect(socket,&QTcpSocket::readyRead,this,&Widget::serverrecv);qtthread *st=new qtthread(socket);st->run();}
//void Widget::serverrecv()
//{//    QTcpSocket* socket=(QTcpSocket*)sender();
//   // socket->readAll();//QBytearray
//    ui->recvinfo->setText(QString(socket->readAll()));//}

演示

多线程


http://www.mrgr.cn/news/6181.html

相关文章:

  • 零基础学习Redis(3) -- Redis常用命令
  • 【达梦数据库】锁超时的处理方法-错误码[-6407]
  • EmguCV学习笔记 VB.Net 第5章 图像变换
  • 通过Qt Creator Plugin开发Qt Creator插件-【金丹篇】
  • 设计模式 -- 概述
  • FPGA开发——DS18B20的使用(理论)
  • Mybatis(面试篇)
  • 软件测试最全面试题及答案整理(2024最新版)
  • 深入了解SOCKS v5协议:代理通信的安全通道
  • 协作新选择:即时白板在线白板软件分享
  • 工业4G路由器
  • K8s CPU Throttle 优化方案
  • MySQL入门学习-命令行工具.mysqlbinlog
  • javascript如何创建函数
  • mac安装xmind
  • linux 网卡配置
  • SQL,连结多行的字串并去除重复
  • 【十四届蓝桥杯省赛C++试卷】
  • 机械键盘里都有哪些轴?各个轴体都有哪些特性?
  • 初识顺序表---C语言