【QT实现UDP收发数据】

2023年6月15日12:06:35

使用QT实现UDP发送和接收数据

QT实现UDP流程

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据包协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

代码实现

1.在.pro文件中添加网络模块

Qt += network

2.接收端

//头文件
#include <QtNetwork>  
    //声明接收套接字,头文件
    QUdpSocket *receiver;  
    //声明槽函数用于接收并处理数据,头文件
public slots://就字面意思:公开槽
    void Receive();
    //监听接收端口,源文件构造函数中
    {
        //创建UDP套接字对象用于接收数据
        receiver = new QUdpSocket(this);
        //绑定端口,参数1:IP地址(本地),参数2:端口号,参数3:绑定模式(这里是共享模式,DontShareAddress是独占端口模式)
        receiver->bind(QHostAddress::AnyIPv4, 8001, QUdpSocket::ShareAddress);
        //连接槽函数,参数1:信号所在的对象,参数2:信号,参数3:槽函数所在的对象,参数4:槽函数
        //信号与槽连接后,触发信号会执行槽函数
        connect(receiver,SIGNAL(readyRead()),this,SLOT(Receive()));
    }
//槽函数定义,源文件中
void MainWindow::Receive()
{
//定义QByteArray类型变量
    QByteArray datagram;
    //设置data的大小为等待处理的数据报的大小,这样才能接收到完整的数据
    datagram.resize(receiver->pendingDatagramSize());
    // 接收数据报,将其存放到datagram中
    receiver->readDatagram(datagram.data(), datagram.size());
    //处理接收数据
    QString str = datagram.data();//此处data()函数返回char*类型,可以用QString类型接收结果
    //然后可以将QString显示出来,比如显示在QLabel、QLineEdit、QTextEdit或显示在程序输出里
    qDebug()<<str;//这里用qDebug()是显示在程序输出中,注意!!!使用前需要加头文件<QDebug>!!!
}

    //关闭接收套接字,源文件析构函数中
    receiver->close();

3.发送端

//头文件
#include <QtNetwork>
    //声明发送套接字,头文件
    QUdpSocket *sender;
    //发送数据,源文件构造函数中
    {
        //创建UDP套接字用于发送数据
        sender = new QUdpSocket(this);
    //设置要发送的字符串并转变类型
    QString str = "543se6w56";
    QByteArray datagram = str.toLatin1();
    //QByteArray datagram = ui->lineEdit_send->text().toLatin1();//这里是从ui界面单行文本框中获取数据
    //发送数据,参数1:要发送的数据char*类型,参数2:撒送数据的大小,参数3:ip地址,参数4:端口号
    sender->writeDatagram(datagram.data(), datagram.size(),
                          QHostAddress("192.168.10.93"), 8001);
    }
    //关闭发送套接字,源文件析构函数中
    sender->close();

发送端和接收端可以在一个项目中实现,也可以在两个项目中分别实现。

  • 作者:望断归来路
  • 原文链接:https://blog.csdn.net/qq_40767523/article/details/122380512
    更新时间:2023年6月15日12:06:35 ,共 1565 字。