Qt 8. UDP客户端通信

这篇具有很好参考价值的文章主要介绍了Qt 8. UDP客户端通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 代码
//UdpClient.h
#ifndef UDPCLIENT_H
#define UDPCLIENT_H

#include <QtNetwork>

class Ex2;      // 声明类
class UdpClient : public QObject
{
    Q_OBJECT
public:
    explicit UdpClient(Ex2 *ui = nullptr);
    ~UdpClient();
    void Send(QByteArray buf,QHostAddress addr, int port);
    void Send(char *buf,int length,QHostAddress addr, int port);
    void Send(char *buf,int length);
    void Send(QByteArray buf);
    void Receive();
    bool Close();
    bool Open(QString ip,int port);
    void SaveIpPort(QHostAddress ip,int port);
private:
    Ex2 *pUi;
    QUdpSocket *socket;
    QHostAddress addr;
    int port;
signals:

};

#endif // UDPCLIENT_H
//UdpClient.cpp
#include "UdpClient.h"
#include "ex2.h"
#include "ui_ex2.h"

UdpClient::UdpClient(Ex2 *ui)
{
    socket = new QUdpSocket();
    pUi = ui;
    connect(socket,&QUdpSocket::readyRead,this,&UdpClient::Receive);
}

UdpClient::~UdpClient()
{
    delete socket;
}

bool UdpClient::Open(QString ip,int port)
{
    socket->close();/*取消绑定端口号使用:udpsocket->close()方法*/
    QHostAddress ipAddr = QHostAddress(ip);
    SaveIpPort(ipAddr,port);
    socket->bind(ipAddr,port);
    return true;
}

bool UdpClient::Close()
{
    socket->close();
    return true;
}

void UdpClient::SaveIpPort(QHostAddress ipAddr,int ipPort)
{
    addr = ipAddr;
    port = ipPort;
}

void UdpClient::Send(char *buf,int length,QHostAddress addr, int port)
{
    QByteArray arr(buf,length);
    socket->writeDatagram(arr,addr,port);
    socket->flush();
}

void UdpClient::Send(char *buf,int length)
{
    QByteArray arr(buf,length);
    socket->writeDatagram(arr,addr,port);
    socket->flush();
}

void UdpClient::Send(QByteArray buf,QHostAddress addr, int port)
{
    socket->writeDatagram(buf,addr,port);
    socket->flush();
}

void UdpClient::Send(QByteArray buf)
{
    socket->writeDatagram(buf,addr,port);
    socket->flush();
}

//12 34 A1 A2 -> "12 34 A1 A2"
QString ByteArrayToHexString(QByteArray data)
{
    QString ret(data.toHex().toUpper());
    int len = ret.length()/2;
    for(int i=1;i<len;i++)
    {
        ret.insert(2*i+i-1," ");
    }

    return ret;
}

void UdpClient::Receive()
{

    QHostAddress addr; //用于获取发送者的 IP 和端口
    quint16 port;
    //数据缓冲区
    QByteArray buffer;
    while(socket->hasPendingDatagrams())
    {
        //调整缓冲区的大小和收到的数据大小一致
        buffer.resize(socket->bytesAvailable());

        //接收数据
        socket->readDatagram(buffer.data(),buffer.size(),&addr,&port);
        //显示
        QString str0 = ByteArrayToHexString(buffer) +" ";
        if(!buffer.isEmpty())
        {
            QString str = pUi->ui->textEditMy1->toPlainText();
            str += str0;
            //刷新显示
            pUi->ui->textEditMy1->setText(str);
        }
    }
}
//Ex2.cpp
#include "ex2.h"
#include "ui_ex2.h"

int static cnt = 0;

Ex2::Ex2(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Ex2)
{
ui->setupUi(this);

....
    //UDP
    udpClientSocket = new UdpClient(this);
    ui->lineEditUdpIp->setText("192.168.9.123");
    ui->lineEditUdpPort->setText("6000");
}

void Ex2::on_pushButtonUdpConnect_clicked()
{
    if(ui->pushButtonUdpConnect->text()==tr("创建"))
    {
        if(udpClientSocket->Open(ui->lineEditUdpIp->text(),ui->lineEditUdpPort->text().toInt()) == true)
        {
            ui->pushButtonUdpConnect->setText("取消");
        }
    }
    else
    {
        udpClientSocket->Close();
        ui->pushButtonUdpConnect->setText("创建");
    }
}

void Ex2::on_pushButtonUdpSend_clicked()
{
    //获取文本框内容并以ASCII码形式发送
    uchar buf[13];
    int i=0;
    buf[i++] = 0xAA;
    buf[i++] = 0x55;
    buf[i++] = 0xAA;
    udpClientSocket->Send((char *)buf,i);
}
//Ex2.h
#ifndef EX2_H
#define EX2_H

#include <QDialog>

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include ".\UDP\UdpClient.h"


QT_BEGIN_NAMESPACE
namespace Ui { class Ex2; }
QT_END_NAMESPACE

class Ex2 : public QDialog
{
    Q_OBJECT

public:
    Ex2(QWidget *parent = nullptr);
    ~Ex2();
    Ui::Ex2 *ui;
    UdpClient *udpClientSocket;

private slots:
    void on_pushButtonUdpConnect_clicked();

    void on_pushButtonUdpSend_clicked();

private:
    //Ui::Ex2 *ui;
    QSerialPort *serial;
};
#endif // EX2_H
2. 效果

以上代码可以实现UDP收发功能。
Qt 8. UDP客户端通信,Qt,qt,udp,开发语言文章来源地址https://www.toymoban.com/news/detail-648495.html

到了这里,关于Qt 8. UDP客户端通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Java网络编程】基于UDP-Socket 实现客户端、服务器通信

    ​ 哈喽,大家好~我是你们的老朋友: 保护小周ღ   本期为大家带来的是网络编程的 UDP Socket 套接字,基于 UDP协议的 Socket 实现客户端服务器通信 ,Socket 套接字可以理解为是,传输层给应用层提供的一组 API,如此程序,确定不来看看嘛~~ 本期收录于博主的专栏 : JavaEE_保

    2024年02月02日
    浏览(71)
  • C# Socket通信从入门到精通(12)——多个同步UDP客户端C#代码实现

    我们在开发Udp客户端程序的时候,有时候在同一个软件上我们要连接多个服务器,这时候我们开发的一个客户端就不够使用了,这时候就需要我们开发出来的软件要支持连接多个服务器,最好是数量没有限制,这样我们就能应对任意数量的服务器连接,由于我们开发的Udp客户

    2024年02月04日
    浏览(60)
  • C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现

    在之前的文章C# Socket通信从入门到精通(13)——单个异步UDP客户端C#代码实现我介绍了单个异步Udp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步发送、异步接收的操作,那么这时候我们使用之前单个异步Udp客户

    2024年02月03日
    浏览(81)
  • unity Sockets通信 使用UDP协议,设置客户端电脑网络配置,使用新线程获取数据,解决卡顿问题,

    今天调试和服务器连接,发现始终获取不到服务器的数据, 电脑和服务器都在同一局域网,仍然获取不到, 下面是电脑环境配置, 第一步: 设置网络为专用网络,然后点击配置防火墙和安全设置,关闭防火墙 (点击所连接的wifi的属性) 第二步:设置出站 入站规则 点击高

    2024年02月07日
    浏览(60)
  • BearPi-HM_Nano开发板WiFi编程开发——UDP客户端

    本示例将演示如何在BearPi-HM_Nano开发板上使用socket编程创建UDP客户端,就收客户端消息并回复固定消息。 本案例主要使用了以下几个API完socket编程实验 描述: 在网络编程中所需要进行的第一件事情就是创建一个socket,无论是客户端还是服务器端,都需要创建一个socket,该函

    2023年04月08日
    浏览(34)
  • 【Qt专栏】Qt实现TCP服务端和客户端通信

    网络通信是程序员必须会的一项生存技能,这里简单的实现了服务端和客户端通信的两个小示例,代码可以直接拿来用,开发环境是Qt5.9.6。 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 1.项目架构 2.tcpserver.h文件 3.tcpserver.cpp文件 4.测试效果 好了,两个小程序写完并

    2024年02月12日
    浏览(37)
  • C# Socket通信从入门到精通(16)——单个同步UDP服务器监听多个客户端C#代码实现

    我们在开发UDP通信程序时,有时候我们也需要开发UDP服务器程序,这个服务器只需要和一个客户端实现通信,比如这篇博文C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现,但是在实际项目中有的时候需要和多个客户端进行通信,这时和一个客

    2024年01月22日
    浏览(64)
  • C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现

    我们在开发UDP通信程序时,除了开发UDP客户端程序,有时候我们也需要开发UDP服务器程序,这在实际项目中是经常会遇到的,所以说掌握UDP服务器程序的开发是一项必备的技能,尤其在上位机软件开发领域,掌握UDP服务器程序的开发是走向高级工程师的必经之路,也是面试必

    2024年02月03日
    浏览(60)
  • 【Java】网络编程与Socket套接字、UDP编程和TCP编程实现客户端和服务端通信

    为什么需要网络编程? 现在网络普及程序越来越高,网络上保存着我们日常生活中需要的各种资源,使用程序通过网络来获取这些资源的过程就需要网络编程来实现。 什么是网络编程? 网络编程,指网络上的主机,通过不同的进程以程序的方式实现网络通信(网络数据传输)

    2024年02月17日
    浏览(79)
  • QT实现TCP通信(服务器与客户端搭建)

    创建一个QTcpServer类对象,该类对象就是一个服务器 调用listen函数将该对象设置为被动监听状态,监听时,可以监听指定的ip地址,也可以监听所有主机地址,可以通过指定端口号,也可以让服务器自动选择 当有客户端发来连接请求时,该服务器会自动发射一个newConnection信号

    2024年02月09日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包