一、UDP简介
1)UDP(User Datagram Protocol,用户数据报协议)
UDP是一个轻量级、不可靠、面向数据报的、无连接的传输层协议,多用于可靠性要求不严格,不是非常重要的传输,如直播、视频会议等等。
2)Qt中QUdpSocket类继承自QAbstractSocket,用来发送和接收UDP数据报,”Socket”即套接字,套接字即IP地址+端口号。其中IP地址指定了网络中的一台主机,二端口号则指定了该主机上的一个应用程序,端口号只具有本地意义,使用套接字即可实现网络上的两个应用程序之间的通信。
3)QUdpSocket支持IPv4广播,要广播数据报,则只需发送到一个特殊的地址QHostAddress::Broadcast(即255.255.255.255),数据报一般建议发送字节数小于512字节。端口号选择1024-65535(1024以下的常用作保留端口号,如FTP常用端口号21,Telnet常用端口号23,DNS域名服务器常用端口53等)。
————————————————
版权声明:本文为CSDN博主「喝水怪~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43686329/article/details/120352026
二:代码实现
udpwidget.h
#ifndef UDPWIDGET_H
#define UDPWIDGET_H
#include <QtWidgets>
#include <QUdpSocket>
namespace Ui {
class UdpWidget;
}
class UdpWidget : public QWidget
{
Q_OBJECT
public:
explicit UdpWidget(QWidget *parent = 0);
~UdpWidget();
private:
Ui::UdpWidget *ui;
QUdpSocket *udpSocket;
QHostAddress sender;
quint16 senderPort;
private slots:
void readPendingDatagrams();
void on_pushButton_clicked();
};
#endif // UDPWIDGET_H
udpwidget.cpp
#include "udpwidget.h"
#include "ui_udpwidget.h"
UdpWidget::UdpWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::UdpWidget)
{
ui->setupUi(this);
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::LocalHost, 7755);
//客户端发送数据后触发readyRead
connect(udpSocket, SIGNAL(readyRead()),
this, SLOT(readPendingDatagrams()));
}
UdpWidget::~UdpWidget()
{
delete ui;
}
void UdpWidget::readPendingDatagrams()
{
//只要缓冲区有数据,那么就不断的读取然后处理
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
//把缓冲区的大小重设为待读取的数据的大小
datagram.resize(udpSocket->pendingDatagramSize());
//datagram.data()是把QByteArray转为char *
//sender代表发送端的IP地址,senderPort代表发送端的端口
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
//业务逻辑
ui->recvEdit->setText(QString::fromLocal8Bit(datagram));
}
}
void UdpWidget::on_pushButton_clicked()
{
QString str = ui->sendEdit->toPlainText();
udpSocket->writeDatagram(str.toLocal8Bit(), sender, senderPort);
}
界面文件
文章来源:https://www.toymoban.com/news/detail-677476.html
文章来源地址https://www.toymoban.com/news/detail-677476.html
到了这里,关于QT实现UDP通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!