PySide6.QtNetwork.QUdpSocket

class QUdpSocket

QUdpSocket 类提供了一个UDP套接字。更多

PySide6.QtNetwork.QUdpSocket 的继承图

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

UDP(用户数据报协议)是一种轻量级、不可靠、面向数据报、无连接的协议。当可靠性不重要时可以使用它。QUdpSocketQAbstractSocket 的一个子类,允许你发送和接收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() 来控制组成员资格,使用 MulticastTtlOptionMulticastLoopbackOption 来设置TTL和回环套接字选项。使用 setMulticastInterface() 来控制组播数据报的输出接口,使用 multicastInterface() 来查询它。

使用 QUdpSocket,您还可以通过 connectToHost() 建立到 UDP 服务器的虚拟连接,然后使用 read() 和 write() 交换数据报,而无需为每个数据报指定接收者。

广播发送者广播接收者多播发送者多播接收者示例展示了如何在应用程序中使用QUdpSocket

__init__([parent=None])
Parameters:

父对象QObject

创建一个 QUdpSocket 对象。

parent 被传递给 QObject 构造函数。

另请参阅

socketType()

bind(addr[, port=0[, mode=QAbstractSocket.BindFlag.DefaultForPlatform]])
Parameters:
Return type:

布尔

hasPendingDatagrams()
Return type:

布尔

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

joinMulticastGroup(groupAddress)
Parameters:

groupAddressQHostAddress

Return type:

布尔

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

请注意,如果您尝试加入一个IPv4组,您的套接字不能使用IPv6绑定(或在双模式下使用Any)。您必须改用AnyIPv4

如果成功,此函数返回 true;否则返回 false 并相应地设置套接字错误。

注意

在所有操作系统中,不支持在没有选择接口的情况下加入IPv6多播组。请考虑使用指定接口的重载方法。

另请参阅

leaveMulticastGroup()

joinMulticastGroup(groupAddress, iface)
Parameters:
Return type:

布尔

这是一个重载函数。

加入接口 iface 上的多播组地址 groupAddress

另请参阅

leaveMulticastGroup()

leaveMulticastGroup(groupAddress)
Parameters:

groupAddressQHostAddress

Return type:

布尔

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

如果成功,此函数返回true;否则返回false并相应地设置套接字错误。

注意

此函数应使用与传递给joinMulticastGroup()相同的参数调用。

另请参阅

joinMulticastGroup()

leaveMulticastGroup(groupAddress, iface)
Parameters:
Return type:

布尔

这是一个重载函数。

离开由groupAddress指定的多播组,该组位于接口iface上。

注意

此函数应使用与传递给joinMulticastGroup()相同的参数调用。

另请参阅

joinMulticastGroup()

multicastInterface()
Return type:

QNetworkInterface

返回用于多播数据报的输出接口的接口。这对应于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:

QNetworkDatagram

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

失败时,返回一个QNetworkDatagram,报告not valid

如果 maxSize 太小,数据报的其余部分将会丢失。如果 maxSize 为 0,数据报将会被丢弃。如果 maxSize 为 -1(默认值),此函数将尝试读取整个数据报。

setMulticastInterface(iface)
Parameters:

ifaceQNetworkInterface

设置多播数据报的出站接口为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:
Return type:

整数

这是一个重载函数。

将数据报 datagram 发送到主机地址 host 和端口 port

如果成功,该函数返回发送的字节数;如果遇到错误,则返回-1。