Qt - UDP网络编程

本文详细介绍了使用Qt的QUdpSocket进行UDP网络编程,包括QUdpSocket的基本操作、UDP通信流程,以及单播、多播和广播三种模式的实现。QUdpSocket支持IPv4广播,可以通过joinMulticastGroup()加入多播组。示例代码展示了发送和接收数据报的实现。
摘要由CSDN通过智能技术生成

1. QUdpSocket(通信套接字)

UDP(User Datagram Protocol,用户数据报协议)

UDP是一个轻量级、不可靠、面向数据报的、无连接的协议,多用于可靠性要求不严格,不是非常重要的传输。

QUdpSocket类继承自QAbstractSocket,用来发送和接收UDP数据报,”Socket”即套接字,套接字即IP地址+端口号。其中IP地址指定了网络中的一台主机,二端口号则指定了该主机上的一个网络程序,使用套接字即可实现网络上的两个应用程序之间的通信。

QUdpSocket支持IPv4广播,要广播数据报,则只需发送到一个特殊的地址QHostAddress::Broadcast(即255.255.255.255),数据报一般建议发送字节数小于512字节。端口号选择1024-65535(1024以下的常用作保留端口号,如FTP常用端口号21,Telnet常用端口号23,DNS域名服务器常用端口53等)。

1.1 信号

1.2 公有函数

函数

描述

bool hasPendingDatagrams() const

如果至少有一个数据报等待读取,则返回true;否则返回false。

bool joinMulticastGroup(const QHostAddress &groupAddress)

加入操作系统选择的默认接口上groupAddress指定的组播组。套接字必须处于BoundState状态,否则会发生错误。

bool joinMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)

这是一个重载函数。在接口上加入组播组地址groupAddress。

bool leaveMulticastGroup(const QHostAddress &groupAddress)

在操作系统选择的默认接口上离开groupAddress指定的组播组。套接字必须处于BoundState状态,否则会发生错误。

bool leaveMulticastGroup(const QHostAddress &groupAddress, const QNetworkInterface &iface)

这是一个重载函数。离开接口上指定groupAddress的组播组。

QNetworkInterface multicastInterface() const

返回多播数据报的出接口。这对应于IPv4套接字的IP_MULTICAST_IF套接字选项和IPv6套接字的IPV6_MULTICAST_IF套接字选项。如果之前没有设置接口,这个函数将返回一个无效的qnetworkinterface。套接字必须处于BoundState状态,否则返回无效的QNetworkInterface。

qint64 pendingDatagramSize() const

返回第一个挂起的UDP数据报的大小。如果没有可用的数据报,这个函数返回-1。

qint64 readDatagram(char *data, qint64 maxSize, QHostAddress *address = nullptr, quint16 *port = nullptr)

接收不大于maxSize字节的数据报,并将其存储在数据中。发送方的主机地址和端口存储在address和port中(除非指针是0)。成功返回数据报的大小;否则返回1。

QNetworkDatagram receiveDatagram(qint64 maxSize = -1)

接收一个不大于maxSize字节的数据报,并在QNetworkDatagram对象中返回它,以及发送者的主机地址和端口。如果可能,该函数还将尝试确定数据报的目的地址、端口和接收时的跳数。

void setMulticastInterface(const QNetworkInterface &iface)

将组播数据报的出接口设置为当前接口。这对应于IPv4套接字的IP_MULTICAST_IF套接字选项和IPv6套接字的IPV6_MULTICAST_IF套接字选项。套接字必须处于BoundState状态,否则此函数不执行任何操作。

qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)

将大小为size的数据报发送到端口上的主机地址。返回成功发送的字节数;否则返回1。

qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

这是一个重载函数。将数据报发送到主机地址和端口。

•从QAbstractSocket继承了37个公共函数,上面有写QAbstractSocket的公有函数

本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓

1.3 发送与接收函数

QUdpSocket对于发送数据报文提供了三个重载函数:

qint64 writeDatagram(const char *data, qint64 size, const QHostAddress &address, quint16 port)//将大小为size的数据报发送到端口上的主机地址。返回成功发送的字节数;否则返回1。
qint64 writeDatagram(const QNetworkDatagram &datagram)
qint64 writeDatagram(const QByteArray &datagram, const QHostAddress &host, quint16 port)

接收消

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值