- class QUdpSocket#
QUdpSocket类提供了 UDP 套接字。 更多...摘要#
方法#
注意
此文档可能包含从C++自动翻译到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建工单的方式来通知我们。
详细描述#
警告
本节包含从C++自动翻译到Python的片段,可能存在错误。
UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报、无连接的协议。在可靠性不重要的情况下可以使用。
QUdpSocket是QAbstractSocket的一个子类,允许您发送和接收UDP数据报。使用 此类最常见的方法是通过使用
bind()将地址和端口绑定,然后调用writeDatagram()和readDatagram()或receiveDatagram()进行数据传输。如果您想使用标准 QIODevice 函数 read()、readLine()、write() 等,则必须首先通过调用connectToHost()将套接字直接连接到对等方。套接字每次将数据报写入网络时都会发出 bytesWritten() 信号。如果您只想发送数据报,则不需要调用
bind()。每当有数据报到达时,就会发出 readyRead() 信号。在这种情况下,
hasPendingDatagrams()返回 true。调用pendingDatagramSize()获取第一个待处理数据报的大小,然后使用readDatagram()或receiveDatagram()读取它。注意
在收到 readyRead() 信号时,应该读取传入的数据报,否则在下一个数据报的情况下不会发出此信号。
示例
def initSocket(self): udpSocket = QUdpSocket(self) udpSocket.bind(QHostAddress.LocalHost, 7755) udpSocket.readyRead.connect( self.readPendingDatagrams) def readPendingDatagrams(self): while udpSocket.hasPendingDatagrams(): datagram = udpSocket.receiveDatagram() processTheDatagram(datagram)
QUdpSocket还支持 UDP 组播。使用joinMulticastGroup()和leaveMulticastGroup()控制组成员身份,使用MulticastTtlOption和MulticastLoopbackOption设置 TTL 和回环套接字选项。使用setMulticastInterface()控制组播数据报的输出接口,并使用multicastInterface()查询它。使用
QUdpSocket,您还可以通过connectToHost()建立与 UDP 服务器的虚拟连接,然后使用 read() 和 write() 交换数据包,无需为每个数据包指定接收器。广播发送器、广播接收器、多播发送器 和 多播接收器 示例说明了如何在应用程序中使用
QUdpSocket。创建一个
QUdpSocket对象。parent传递给 QObject 构造函数。参阅
- bind(addr[, port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])#
- 参数:
addr –
SpecialAddressport – int
mode –
BindFlag组合
- 返回类型:
bool
- hasPendingDatagrams()#
- 返回类型:
bool
如果至少有一个数据包等待读取,则返回
true;否则返回false。- joinMulticastGroup(groupAddress)#
- 参数:
groupAddress –
QHostAddress- 返回类型:
bool
使用系统默认接口将groupAddress所指定的多播组加入。套接字必须处于BoundState状态,否则将发生错误。
注意,如果您试图加入IPv4组,您的套接字不能使用IPv6(或在双模式下,使用
Any) 进行绑定。您必须使用AnyIPv4。此函数在成功时返回
true,否则返回false并根据套接字错误设置相应的错误。- joinMulticastGroup(groupAddress, iface)
- 参数:
groupAddress –
QHostAddressiface –
QNetworkInterface
- 返回类型:
bool
这是一个重载函数。
在界面
iface上加入多播组地址groupAddress。- leaveMulticastGroup(groupAddress)#
- 参数:
groupAddress –
QHostAddress- 返回类型:
bool
在使用操作系统选择的默认接口上离开由
groupAddress指定的多播组。套接字必须处于BoundState状态,否则将发生错误。此函数在成功时返回
true,否则返回false并根据套接字错误设置相应的错误。- leaveMulticastGroup(groupAddress, iface)
- 参数:
groupAddress –
QHostAddressiface –
QNetworkInterface
- 返回类型:
bool
这是一个重载函数。
在界面
iface上离开由groupAddress指定的多播组。- multicastInterface()#
- 返回类型:
返回用于多播数据报的传出接口。这对于IPv4套接字对应于IP_MULTICAST_IF套接字选项,对于IPv6套接字对应于IPV6_MULTICAST_IF套接字选项。如果没有先前设置接口,则此函数返回无效的
QNetworkInterface。套接字必须处于BoundState状态,否则返回无效的QNetworkInterface。- pendingDatagramSize()#
- 返回类型:
int
返回第一个待处理的UDP数据报的大小。如果没有数据报可用,该函数返回-1。
- readDatagram(maxlen)#
- 参数:
maxlen – int
- 返回类型:
(数据,地址,端口)
接收不超过
maxSize字节的数据报并将其存储在data中。发送者的主机地址和端口存储在*``address``和*``port``中(除非指针为None)。如果成功,返回数据报的大小;否则返回-1。
如果
maxSize太小,数据报的其余部分将丢失。为了避免数据丢失,在尝试读取之前,请调用pendingDatagramSize()以确定待处理数据报的大小。如果maxSize为0,则数据报将被丢弃。- receiveDatagram([maxSize=-1])#
- 参数:
maxSize – int
- 返回类型:
接收不超过
maxSize字节的数据报,并将其存储在QNetworkDatagram对象中,同时包含发送者的主机地址和端口。如果可能,此函数还将尝试确定接收时数据报的目标地址、端口号和跳数。在失败时,返回一个报告
not valid的QNetworkDatagram。如果
maxSize设置得太小,剩下的数据报将会丢失。如果maxSize为 0,则数据报将被丢弃。如果maxSize为 -1(默认值),此函数将尝试读取整个数据报。- setMulticastInterface(iface)#
- 参数:
iface –
QNetworkInterface
将多播数据报的输出接口设置为接口
iface。这对应于 IPv4 套接字的 IP_MULTICAST_IF 套接字选项和 IPv6 套接字的 IPV6_MULTICAST_IF 套接字选项。套接字必须是绑定状态,否则此函数将不执行任何操作。- writeDatagram(datagram, host, port)#
- 参数:
datagram –
QByteArrayhost –
QHostAddressport – int
- 返回类型:
int
这是一个重载函数。
将数据报
datagram发送到主机地址host的port通信端口。如果成功,此函数返回发送的字节数;如果在遇到错误时,返回 -1。
- writeDatagram(datagram)
- 参数:
datagram –
QNetworkDatagram- 返回类型:
int
这是一个重载函数。
将数据报
datagram发送到datagram中包含的主机地址和端口号,使用也在那里设置的计算机网络接口和跳数限制。如果未设置目标地址和端口号,此函数将发送到通过connectToHost()传递的地址。如果目标地址是具有非空
scope id的 IPv6 地址,但与datagram中的接口索引不同,则操作系统将选择哪个接口发送是未定义的。如果成功,此函数返回发送的字节数;如果在遇到错误时,返回 -1。
警告
在已连接的 UDP 套接字上调用此函数可能会导致错误且不会发送任何数据包。如果您正在使用已连接的套接字,请使用
write()发送数据报。