Qt进行UDP通讯,创建一个收线程这样可以进行接收数据

这篇具有很好参考价值的文章主要介绍了Qt进行UDP通讯,创建一个收线程这样可以进行接收数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现效果

qt利用线程实现udp,Qt,qt,udp

实现过程

准备工作

在.pro中增加一句话

QT       +=network

绘制界面
qt利用线程实现udp,Qt,qt,udp
.h文件内容:

#ifndef WIDGET_H
#define WIDGET_H

#include "receivethread.h"
#include "sendthread.h"
#include <QWidget>
#include <QUdpSocket>
#include <iostream>
#include <stdint.h>
#include <sstream>
using namespace std;

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

public slots:
    //接收信号
    void receiveSlot();
    //停止线程
    void quitThreaSlot();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_4_clicked();

private:
    Ui::Widget *ui;
    receiveThread*preceiveTHread;



private:
    QUdpSocket *m_udpSocket = nullptr;


};

#endif // WIDGET_H

构造函数内容

ui->setupUi(this);

    preceiveTHread = new receiveThread(this);

    //本地主机名
       QString hostName = QHostInfo::localHostName();

       //本机IP地址
       QHostInfo hostInfo = QHostInfo::fromName(hostName);

       //IP地址列表
       QList<QHostAddress> addrList = hostInfo.addresses();
       for(int i=0;i<addrList.count();i++)
       {
           QHostAddress host = addrList.at(i);

           if(QAbstractSocket::IPv4Protocol == host.protocol())
           {
               QString ip = host.toString();
               ui->comboBox->addItem(ip);
           }
       }

    m_udpSocket = new QUdpSocket(this);
    //连接信号和槽(绑定端口就开始接收信号线程,接收到数据就显示,关闭窗口关闭线程)

    connect(this,SIGNAL(destroyed()),this,SLOT(quitThreaSlot()));
    connect(preceiveTHread,SIGNAL(receiveSignal()),this,SLOT(receiveSlot()));

对于绑定按钮的定义函数:

void Widget::on_pushButton_clicked()
{
    //本机UDP端口
    qint16 port = ui->spinBox->value();

    if(m_udpSocket->bind(port))
    {
        ui->plainTextEdit->appendPlainText("**已成功绑定");
        ui->plainTextEdit->appendPlainText("**绑定端口: "+QString::number(m_udpSocket->localPort()));
        ui->pushButton->setEnabled(false);
    }
    else
    {
         ui->plainTextEdit->appendPlainText("**绑定失败");
    }
    //启动线程

    preceiveTHread->start();
}

接收信号的槽函数(UDP接收到数据显示)

void Widget::receiveSlot()
{
    ui->lineEdit->clear();
    //是否还有待读取的传入数据报
    while(m_udpSocket->hasPendingDatagrams())
    {
        QByteArray data;

        //返回待读取的数据报的字节数
        data.resize(m_udpSocket->pendingDatagramSize());

        QHostAddress peerAddr;

        quint16 peerPort;

        //读取数据报的内容
        m_udpSocket->readDatagram(data.data(),data.size(),&peerAddr,&peerPort);



        QString str = data.data();

        QString peer = "[From ] +"+peerAddr.toString()+":"+QString::number(peerPort)+"] ";

        ui->lineEdit->setText(peer+str);

    }
}

quitThreaSlot函数:

void Widget::quitThreaSlot()
{
    preceiveTHread->quit();
    preceiveTHread->wait();
}

退出按钮定义:

void Widget::on_pushButton_4_clicked()
{
    preceiveTHread->terminate();
}

使用的receivethread.h就是将run函数重写(循环发送定义的信号延迟即可),在定义一个信号即可。
以上即功能的所有有错还请指出文章来源地址https://www.toymoban.com/news/detail-831272.html

到了这里,关于Qt进行UDP通讯,创建一个收线程这样可以进行接收数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android手机版tcp或者udp通讯测试工具,可以用于工业设备或者系统开发时间测试tcp或是udp连接通讯是否正常工作

    介绍 由于工作需要一款安卓的tcp udp测试工具,而市场里没有或者不好用,或者都是广告,现在个人开发者又不让发布应用了,小巧好用不收集用户信息的不收费没有广告的小工具只能自己用,哈哈。 这里分享给大家一款,tcp或者udp通讯测试工具(android),用于工业设备或者系

    2024年02月11日
    浏览(35)
  • Qt网络编程 (udp广播和接收例)

    使用两个项目 1 sender 用来广播\\\"hello world\\\"; 2 receiver 用来接收广播信息 1 创建Qdialog类 2 在sender.pro 中添加 QT +=network 一行代码 3 在sender.h 中声明类 class QUdpSocket; 在声明一个私有对象 QUdpSocket *sender; 4 在ui界面拖入一个按钮 用来触发广播信息 其槽函数如下 在sender.cpp 构造函数中添

    2024年02月11日
    浏览(24)
  • 如何在前端实现WebSocket发送和接收UDP消息(多线程模式)

    本文将继续介绍如何在前端应用中利用WebSocket技术发送和接收UDP消息,并引入多线程模式来提高发送效率和性能。我们将使用JavaScript语言来编写代码,并结合WebSocket API、UDP数据包、Web Workers和UDP消息监听器来实现这一功能。 首先,我们需要在前端应用中建立一个WebSocket连接

    2024年02月12日
    浏览(28)
  • 使用Java服务器实现UDP消息的发送和接收(多线程)

    在本篇博客中,我们将介绍如何使用Java服务器来实现UDP消息的发送和接收,并通过多线程的方式来处理并发请求。UDP(User Datagram Protocol)是一种无连接、不可靠的传输协议,适合于实时性要求高的应用场景,如实时游戏、语音通信等。 步骤: 首先,我们需要导入Java提供的

    2024年02月12日
    浏览(28)
  • Qt实现UDP高速通讯,下位机为FPGA

    目录 一、为什么要写这篇文章,因为我就是要另辟蹊径,当然也是汲取了网上大咖们的经验,尽量简洁的进行总结 二、关于接收数据需的条件,需要绑定本地IP地址和端口号,可解释为此时为服务器模式,远端为客户端模式,实现的代码非常简单几行代码可以搞定 三、数据

    2024年02月12日
    浏览(21)
  • QT网络编程之实现UDP广播发送和接收

    一.UDP广播介绍 UDP广播地址固定IP地址为:XXX.XXX.XXX.255。 如果向全网段发送广播消息,那么广播地址为:255.255.255.255; 如果向单个网段发送广播消息,例如你的IP是192.168.31.104,那么广播地址为192.168.31.255。 广播消息接收方需要绑定0.0.0.0地址并监听指定端口即可收到广播的群

    2024年03月25日
    浏览(42)
  • [Qt网络编程]之UDP通讯的简单编程实现

    hello!欢迎大家来到我的Qt学习系列之 网络编程之UDP通讯的简单编程实现。 希望这篇文章能对你有所帮助!!! 本篇文章的相关知识请看我的上篇文章: 目录 UDP通讯  基于主窗口的实现  基于线程的实现          UDP数据报协议是一个面向无连接的传输层报文协议 ,它简

    2024年04月25日
    浏览(38)
  • 251_多线程_创建一个多线程的图像处理应用,其中每个线程负责对一部分图像进行处理,然后将处理后的结果合并为最终图像

    举一个更丰富的例子来说明多线程的用法。 我们将创建一个多线程的图像处理应用,其中每个线程负责对一部分图像进行处理,然后将处理后的结果合并为最终图像。 这个例子可以更好地展示多线程并发处理的优势。 假设有一个函数 processImageSection,它会对图像的一个特定

    2024年02月15日
    浏览(26)
  • UDP和TCP可以使用同一个端口吗?

    之前有读者在面试的时候,被问到: TCP 和 UDP 可以同时监听相同的端口吗? 关于端口的知识点,还是挺多可以讲的,比如还可以牵扯到这几个问题: 多个 TCP 服务进程可以同时绑定同一个端口吗? 客户端的端口可以重复使用吗? 客户端 TCP 连接 TIME_WAIT 状态过多,会导致端

    2023年04月08日
    浏览(35)
  • 基于Qt的多线程TCP即时通讯软件的设计与实现

    本文将从涉及到主要技术开始,讲解使用Qt来实现一个支持多客户端链接的 多线程TCP服务器 及其 客户端 的设计与实现的解决方案。 注:本文使用的开发环境为Qt5.15.2, 使用MSVC2019_64编译器, C++11及以上 接下来我将会详细讲解客户端和服务端的设计与实现的关键细节。完整的源

    2024年01月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包