函数接口:
构造函数
QUdpSocket(QObject *parent = nullptr)
发送数据的接口:
qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)
data:需要发送的数据
size:数据的大小
address:接收端的IP
port : 接收端的端口
qint64
writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)
datagram:发送的内容,eg:ui->lineedit0>text();
host: ip
port: 端口号
接收端:
1.绑定UDP socket
bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0)
address:需要绑定的地址
port:需要绑定的端口
2.读取数据
qint64 QUdpSocket::readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)
data:读取后数据的存放地址
maxSize:读取的数据最大值
address:发送者的IP
port:发生者的端口
QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize = -1)
QNetworkDatagram 网络数据管理类
QHostAddress senderAddress() const //获取发送者的IP
int senderPort() const //获取发生者端口
int destinationPort() const //获取对方的端口
官方的接收端代码 demo :
Example:
void Server::initSocket()
{
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::LocalHost, 7755);
connect(udpSocket, &QUdpSocket::readyRead,
this, &Server::readPendingDatagrams);
}
void Server::readPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QNetworkDatagram datagram = udpSocket->receiveDatagram();
processTheDatagram(datagram);
}
}
udp发送端示例代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
QUdpSocket *udp;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
udp = new QUdpSocket(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//发送UDP 数据报
udp->writeDatagram(ui->lineEdit->text().toUtf8(),QHostAddress("192.168.25.2"),6666);
}
udp接收端示例代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include
#include
QUdpSocket *socket;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1.创建UDP 通信对象
socket = new QUdpSocket(this);
//2.绑定UDP socket
if(socket->bind(QHostAddress::Any,6666))
{
qDebug() << "绑定成功";
}else
{
qDebug() << "绑定失败";
}
//3.关联可读信号
connect(socket, &QUdpSocket::readyRead,this,&MainWindow::readPendingDatagrams);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::readPendingDatagrams()
{
qDebug() << "有数据可读";
/*
char buf[1024]={0};
QHostAddress ip;
unsigned short port=0;
socket->readDatagram(buf,1024,&ip,&port);
qDebug() << buf;
*/
//判断是否有网络数据
while (socket->hasPendingDatagrams()) {
//把所有数据读到 datagram
QNetworkDatagram datagram = socket->receiveDatagram();
//输出数据
qDebug() << datagram.senderAddress().toString();
qDebug() << datagram.senderPort();
qDebug() << datagram.data();
}
}