PySide6.QtNetwork.QUdpSocket¶
- class QUdpSocket¶
QUdpSocket类提供了一个UDP套接字。更多…概要¶
方法¶
def
__init__()def
bind()def
readDatagram()def
writeDatagram()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报、无连接的协议。当可靠性不重要时可以使用它。
QUdpSocket是QAbstractSocket的一个子类,允许你发送和接收UDP数据报。使用此类最常见的方式是使用
bind()绑定到地址和端口,然后调用writeDatagram()和readDatagram()/receiveDatagram()来传输数据。如果你想使用标准的QIODevice函数read()、readLine()、write()等,你必须首先通过调用connectToHost()将套接字直接连接到对等方。每次将数据报写入网络时,socket都会发出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]])¶
- Parameters:
addr –
SpecialAddressport – int
mode –
BindFlag的组合
- Return type:
布尔
- hasPendingDatagrams()¶
- Return type:
布尔
如果有至少一个数据报等待读取,则返回
true;否则返回false。- joinMulticastGroup(groupAddress)¶
- Parameters:
groupAddress –
QHostAddress- Return type:
布尔
加入由操作系统选择的默认接口上指定的多播组
groupAddress。套接字必须处于绑定状态,否则会发生错误。请注意,如果您尝试加入一个IPv4组,您的套接字不能使用IPv6绑定(或在双模式下使用
Any)。您必须改用AnyIPv4。如果成功,此函数返回
true;否则返回false并相应地设置套接字错误。- joinMulticastGroup(groupAddress, iface)
- Parameters:
groupAddress –
QHostAddressiface –
QNetworkInterface
- Return type:
布尔
这是一个重载函数。
加入接口
iface上的多播组地址groupAddress。- leaveMulticastGroup(groupAddress)¶
- Parameters:
groupAddress –
QHostAddress- Return type:
布尔
离开由操作系统选择的默认接口上由
groupAddress指定的多播组。套接字必须处于 BoundState,否则会发生错误。如果成功,此函数返回
true;否则返回false并相应地设置套接字错误。- leaveMulticastGroup(groupAddress, iface)
- Parameters:
groupAddress –
QHostAddressiface –
QNetworkInterface
- Return type:
布尔
这是一个重载函数。
离开由
groupAddress指定的多播组,该组位于接口iface上。- multicastInterface()¶
- Return type:
返回用于多播数据报的输出接口的接口。这对应于IPv4套接字的IP_MULTICAST_IF套接字选项和IPv6套接字的IPV6_MULTICAST_IF套接字选项。如果之前没有设置接口,此函数将返回一个无效的
QNetworkInterface。套接字必须处于BoundState,否则将返回一个无效的QNetworkInterface。- pendingDatagramSize()¶
- Return type:
整数
返回第一个待处理的UDP数据报的大小。如果没有可用的数据报,此函数返回-1。
- readDatagram(maxlen)¶
- Parameters:
maxlen – 整数
- Return type:
(data, address, port)
接收一个不超过
maxSize字节的数据报,并将其存储在data中。发送方的主机地址和端口存储在*``address``和*``port``中(除非指针是None)。成功时返回数据报的大小;否则返回 -1。
如果
maxSize太小,数据报的其余部分将会丢失。为了避免数据丢失,在尝试读取之前,调用pendingDatagramSize()来确定待处理数据报的大小。如果maxSize为0,数据报将被丢弃。- receiveDatagram([maxSize=-1])¶
- Parameters:
maxSize – int
- Return type:
接收一个不大于
maxSize字节的数据报,并将其返回到QNetworkDatagram对象中,同时包含发送方的主机地址和端口。如果可能,此函数还会尝试确定数据报的目的地址、端口以及接收时的跳数。失败时,返回一个
QNetworkDatagram,报告not valid。如果
maxSize太小,数据报的其余部分将会丢失。如果maxSize为 0,数据报将会被丢弃。如果maxSize为 -1(默认值),此函数将尝试读取整个数据报。- setMulticastInterface(iface)¶
- Parameters:
iface –
QNetworkInterface
设置多播数据报的出站接口为
iface。这对应于IPv4套接字的IP_MULTICAST_IF套接字选项和IPv6套接字的IPV6_MULTICAST_IF套接字选项。套接字必须处于BoundState状态,否则此函数不执行任何操作。- writeDatagram(datagram)¶
- Parameters:
数据报 –
QNetworkDatagram- Return type:
整数
这是一个重载函数。
将数据报
datagram发送到包含在datagram中的主机地址和端口号,使用同样设置在那里的网络接口和跳数限制。如果目标地址和端口号未设置,此函数将发送到传递给connectToHost()的地址。如果目标地址是IPv6并且具有非空的
scope id,但与datagram中的接口索引不同,则操作系统选择发送的接口是未定义的。如果成功,该函数返回发送的字节数;如果遇到错误,则返回-1。
警告
在已连接的UDP套接字上调用此函数可能会导致错误且不会发送数据包。如果您使用的是已连接的套接字,请使用write()来发送数据报。
- writeDatagram(datagram, host, port)
- Parameters:
数据报 –
QByteArrayhost –
QHostAddressport – int
- Return type:
整数
这是一个重载函数。
将数据报
datagram发送到主机地址host和端口port。如果成功,该函数返回发送的字节数;如果遇到错误,则返回-1。