一、知识点总结
udpSocket->bind(8888); //绑定端口
connect(udpSocket,&QUdpSocket::readyRead,this,&UdpA::dealMsg); //收到对方的消息,立即触发
char buf[1024] = {0};//缓存
QHostAddress peerIp; //对方IP
quint16 peerPort; //对方端口
qint16 length = udpSocket->readDatagram(buf,sizeof(buf),&peerIp,&peerPort);// 读到多少个字符
QString("[%1:%2] %3").arg(peerIp.toString()).arg(peerPort).arg(buf); //字符串模板占位
QString ip = ui->ip->text();
qint16 port = ui->port->text().toInt(); //端口号
QString msg = ui->msg->toPlainText(); //输入框内容
udpSocket->writeDatagram(msg.toUtf8().data(),QHostAddress(ip),port);// 写出字符串
二、案例
1、UdpA
UdpA.h
#ifndef UDPA_H #define UDPA_H #include <QWidget> #include <QUdpSocket> QT_BEGIN_NAMESPACE namespace Ui { class UdpA; } QT_END_NAMESPACE class UdpA : public QWidget { Q_OBJECT public: UdpA(QWidget *parent = nullptr); ~UdpA(); void dealMsg(); //槽函数,处理对方发过来的消息 private slots: void on_pushButton_clicked(); private: Ui::UdpA *ui; QUdpSocket * udpSocket; }; #endif // UDPA_H
UdpA.cpp
#include "UdpA.h" #include "ui_UdpA.h" UdpA::UdpA(QWidget *parent) : QWidget(parent) , ui(new Ui::UdpA) { ui->setupUi(this); setWindowTitle("UdpA:8888"); //分配空间,指定父对象,自动释放内存 udpSocket = new QUdpSocket(this); //绑定端口 udpSocket->bind(8888); //收到对方的消息,立即触发 connect(udpSocket,&QUdpSocket::readyRead,this,&UdpA::dealMsg); } UdpA::~UdpA() { delete ui; } //处理对方发过来的内容 void UdpA::dealMsg() { char buf[1024] = {0}; //缓存 QHostAddress peerIp; //对方IP quint16 peerPort; //对方端口 qint16 length = udpSocket->readDatagram(buf,sizeof(buf),&peerIp,&peerPort);//读到多少个字符 if(length>0){ QString msgTxt = QString("[%1:%2] %3") .arg(peerIp.toString()) .arg(peerPort) .arg(buf); //字符串模板占位 ui->msg->setText(msgTxt); } } void UdpA::on_pushButton_clicked() { //获取对方的IP和端口 QString ip = ui->ip->text(); qint16 port = ui->port->text().toInt(); QString msg = ui->msg->toPlainText(); udpSocket->writeDatagram(msg.toUtf8().data(),QHostAddress(ip),port); }
2、UdpB
UdpB.h
#ifndef UDPB_H #define UDPB_H #include <QWidget> #include <QUdpSocket> namespace Ui { class UdpB; } class UdpB : public QWidget { Q_OBJECT public: explicit UdpB(QWidget *parent = nullptr); ~UdpB(); private slots: void on_pushButton_clicked(); void dealMsg(); private: Ui::UdpB *ui; QUdpSocket * udpSocket; }; #endif // UDPB_H
UdpB.cpp
#include "UdpB.h" #include "ui_UdpB.h" UdpB::UdpB(QWidget *parent) : QWidget(parent), ui(new Ui::UdpB) { ui->setupUi(this); setWindowTitle("UdpB:9999"); udpSocket = new QUdpSocket(this); udpSocket->bind(9999); connect(udpSocket,&QUdpSocket::readyRead,this,&UdpB::dealMsg); } UdpB::~UdpB() { delete ui; } void UdpB::dealMsg(){ QHostAddress peerIp ; quint16 peerPort ; char buf[1024] = {0}; qint64 length = udpSocket->readDatagram(buf,sizeof(buf),&peerIp,&peerPort); if(length > 0){ QString msgTxt = QString("[%1:%2] %3") .arg(peerIp.toString()) .arg(peerPort) .arg(buf); ui->msg->setText(msgTxt); } } void UdpB::on_pushButton_clicked() { //获取对方的IP和端口 QString ip = ui->ip->text(); qint16 port = ui->port->text().toInt(); QString msg = ui->msg->toPlainText(); udpSocket->writeDatagram(msg.toUtf8().data(),QHostAddress(ip),port); }