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();
发送端和接收端可以在一个项目中实现,也可以在两个项目中分别实现。