【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(); 

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