Qt网络通信,多线程实现UDP通信

Qt使用多线程进行UDP通信

UDP

  1. 由于要使用套接字,所以需要在服务器和客户端的工程文件中都添加QT += core gui network
  2. 使用writeDatagram方法传输数据,readDatagram方法接收数据。QT在调用writeDatagram方法时候会自动发出readyRead信号给接收方监听。

多线程

Qt有两种多线程的方法,其中一种是继承QThread的run函数,另外一种是把一个继承于QObject的类转移到一个Thread里,即使用MoveToThread。
  Qt4.8之前都是使用继承QThread的run这种方法,但是Qt4.8之后,Qt官方建议使用第二种方法。因此本文使用的是第二种方法。
  第二种方法主要就是写一个一个继承于QObject的类,将耗时的工作写在该类的槽函数中。
然后将派生类对象移动到一个QThread中,该线程需要start。最后,通过信号连接派生类的槽函数,并通过信号触发槽函数。(槽函数在子线程中执行)。

不多说,直接上服务器代码

travel是自定义的派生类,用于工作
先把ui界面贴一下,其中label名字叫做label_tosend,按钮名字pushbutton_start。
ui

以下是派生类的头文件

#ifndef TRAVEL_H
#define TRAVEL_H

#include <QObject>
#include <QDebug>
#include <QString>
#include <QUdpSocket>

class travel : public QObject
{
   
    Q_OBJECT
public:
    explicit travel(QObject *parent = nullptr);
    ~travel();

signals:
    void sig_ok();
public slots:
    void slot_do(QString msg,int port);
    //主要实现功能的函数,用于传送数据给客户端,其中两个传入参数分别是待传数据和客户端端口号
private:
    QUdpSocket *mudpsocket;
};

#endif // TRAVEL_H
接下来是traval.cpp
#include "travel.h"
#include <QUdpSocket>
#include <QThread>
travel::travel(QObject *parent) : QObject(parent)
{
   
   qDebug()<<"构造了travel";
   mudpsocket=new QUdpSocket(this);//新建一个UDP套接字
}
travel::~travel()
  • 14
    点赞
  • 163
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值