PySide6.QtNetwork.QNetworkDatagram

class QNetworkDatagram

QNetworkDatagram 类提供了UDP数据报的数据和元数据。更多

概要

方法

注意

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

详细描述

QNetworkDatagram 可以与 QUdpSocket 类一起使用,以表示 UDP(用户数据报协议)数据报中包含的完整信息。QNetworkDatagram 封装了数据报的以下信息:

  • 有效载荷数据;

  • 发送者地址和端口号;

  • 目标地址和端口号;

  • 剩余的跳数限制(在IPv4中,此字段通常称为“生存时间” - TTL);

  • 数据报接收或发送的网络接口索引。

QUdpSocket 将尝试在所有操作系统上尽可能匹配常见行为,但在某些操作系统中无法获取上述所有元数据。在使用 writeDatagram() 发送数据报时无法设置的元数据将被静默丢弃。

接收时,senderAddress()senderPort() 属性包含发送数据报的对等方的地址和端口,而 destinationAddress()destinationPort() 包含数据报中的目标地址。这通常是当前机器的本地地址,但也可能是IPv4广播地址(如“255.255.255.255”)或IPv4或IPv6多播地址。应用程序可能会发现确定数据报是通过单播地址专门发送到这台机器还是发送到多个目标地址是有用的。

发送时,senderAddress()senderPort() 应包含发送时要使用的本地地址。发送地址必须是分配给此机器的地址,可以使用 QNetworkInterface 获取,端口号必须是套接字绑定的端口号。这两个字段中的任何一个都可以留空,操作系统将使用默认值填充。destinationAddress()destinationPort() 字段可以设置为与UDP套接字当前关联的目标地址不同的地址。

通常,当发送数据报以回复先前接收到的数据报时,会将destinationAddress()设置为传入数据报的senderAddress(),端口号也是如此。为了简化这一常见过程,QNetworkDatagram提供了函数makeReply()

hopCount() 函数包含,对于接收到的数据报,数据包的剩余跳数限制。在发送时,它包含要设置的跳数限制。大多数协议会保留此值为默认值,并让操作系统决定使用的最佳值。IPv4 上的多播通常使用此字段来指示多播组的范围(链路本地、组织本地或全局)。

interfaceIndex() 函数包含接收数据包的操作系统接口的索引。此值与可以在 scopeId() 属性上设置的值相同,并且与 index() 属性匹配。当向全局地址发送数据包时,不需要设置接口索引,因为操作系统将使用系统路由表选择正确的接口。在向链路本地目标发送数据报时,无论是单播还是多播,此属性都很重要。

功能支持

QNetworkDatagram 的一些功能并非在所有操作系统中都受支持。所有系统都支持远程主机的地址和端口(接收数据包中的发送方和发送数据包中的目的地)。在大多数操作系统中,其他功能仅支持IPv6。软件应在运行时检查是否可以确定IPv4地址的其余部分。

当前功能支持如下:

操作系统

本地地址

跳数

接口索引

FreeBSD

支持

支持

仅适用于IPv6

Linux

支持

支持

支持

OS X

支持

支持

仅适用于IPv6

支持RFC 3542的其他Unix系统

仅适用于IPv6

仅适用于IPv6

仅适用于IPv6

Windows(桌面版)

支持

支持

支持

Windows RT

不支持

不支持

不支持

__init__()

创建一个没有有效载荷数据和未定义目标地址的QNetworkDatagram对象。

可以通过使用setData()来修改有效载荷,并且可以使用setDestination()来设置目标地址。

如果目标地址未定义,writeDatagram() 将尝试通过使用 connectToHost() 将数据报发送到最后关联的地址。

__init__(other)
Parameters:

其他QNetworkDatagram

创建other数据报的副本,包括有效载荷和元数据。

要创建适合在回复中发送的数据报,请使用 makeReply() ;

__init__(data[, destinationAddress=QHostAddress()[, port=0]])
Parameters:

创建一个QNetworkDatagram对象,并将data设置为有效载荷数据,同时将destinationAddressport设置为数据报的目的地址。

clear()

清除此QNetworkDatagram对象中的有效载荷数据和元数据,将其重置为默认值。

data()
Return type:

QByteArray

返回此数据报的数据负载。对于从网络接收的数据报,它包含数据报的负载。对于要发送的数据报,它是将要发送的数据报。

请注意,数据报可以在没有数据的情况下传输,因此返回的 QByteArray 可能为空。

另请参阅

setData()

destinationAddress()
Return type:

QHostAddress

返回与此数据报关联的目标地址。对于从网络接收的数据报,它是对方节点发送数据报的地址,可以是本机的本地地址,也可以是组播或广播地址。对于发出的数据报,它是数据报应发送到的地址。

如果此数据报未设置目标地址,返回的对象将向isNull()报告为真。

destinationPort()
Return type:

整数

返回与此数据报关联的目标端口号。对于从网络接收的数据报,它是对方节点发送数据报到的本地端口号。对于发出的数据报,它是数据报应发送到的对方端口。

如果没有与此数据报关联的目标地址,此函数返回 -1。

hopLimit()
Return type:

整数

返回与此数据报关联的跳数限制。跳数限制是指在IP数据包过期并返回错误给数据报发送者之前,允许转发该数据包的节点数量。在IPv4中,此值通常称为“生存时间”(TTL)。

如果此数据报是从网络接收的,则这是接收后数据报的剩余跳数,并且每个转发数据包的节点都会将其减1。值为-1表示无法获取跳数限制。

如果这是一个出站数据报,这是在发送时要在IP头中设置的值。值为-1表示操作系统应选择该值。

另请参阅

setHopLimit()

interfaceIndex()
Return type:

整数

返回与此数据报关联的接口索引。接口索引是一个正数,用于唯一标识操作系统中的网络接口。此数字与接口的index()返回的值匹配。

如果此数据报是从网络接收的,这是接收数据包的接口的索引。如果这是一个出站数据报,这是数据报应发送的接口的索引。

值为0表示接口索引未知。

另请参阅

setInterfaceIndex()

isNull()
Return type:

布尔

如果这个QNetworkDatagram对象为空,则返回true。这个函数与isValid()相反。

isValid()
Return type:

布尔

如果此QNetworkDatagram对象有效,则返回true。有效的QNetworkDatagram对象至少包含一个发送者或接收者地址。有效的数据报可以包含空的负载。

makeReply(payload)
Parameters:

payloadQByteArray

Return type:

QNetworkDatagram

senderAddress()
Return type:

QHostAddress

返回与此数据报关联的发送方地址。对于从网络接收的数据报,它是发送数据报的对等节点的地址。对于出站数据报,它是发送时要使用的本地地址。

如果在此数据报上没有设置发送者地址,返回的对象将报告为isNull()为真。

senderPort()
Return type:

整数

返回与此数据报关联的发送方的端口号。对于从网络接收的数据报,它是对方节点发送数据报的端口号。对于发出的数据报,它是数据报应发送的本地端口。

如果没有与此数据报关联的发送方地址,此函数返回 -1。

setData(data)
Parameters:

数据QByteArray

将此数据报的数据负载设置为data。通常不需要在接收到的数据报上调用此函数。对于发出的数据报,此函数设置要在网络上发送的数据。

由于数据报可以为空,因此空的 QByteArray 是 data 的有效值。

另请参阅

data()

setDestination(address, port)
Parameters:

设置与此数据报关联的目标地址为address和端口号port。目标地址和端口号通常在接收时由QUdpSocket设置,因此在接收到的数据报上无需调用此函数。

对于出站数据报,此函数可用于设置数据报应发送到的地址。它可以是用于与对等方通信的单播地址,也可以是用于发送到一组设备的广播或多播地址。

setHopLimit(count)
Parameters:

count – int

设置与此数据报关联的跳数限制为count。跳数限制是指在IP数据包过期并返回错误给数据报发送者之前,允许转发该数据包的节点数量。在IPv4中,此值通常称为“生存时间”(TTL)。

通常不需要对从网络接收的数据报调用此函数。

如果这是一个出站数据包,这是在发送时要在IP头中设置的值。该值的有效范围是1到255。此函数还接受-1的值,表示应由操作系统选择该值。

另请参阅

hopLimit()

setInterfaceIndex(index)
Parameters:

索引 – int

将此数据报关联的接口索引设置为index。接口索引是一个正数,用于唯一标识操作系统中的网络接口。此数字与接口的index()返回的值匹配。

通常不需要对从网络接收的数据报调用此函数。

如果这是一个出站数据包,这是数据报应发送的接口的索引。值为0表示操作系统应根据其他因素选择接口。

请注意,接口索引也可以通过setScopeId()为IPv6目标地址设置,然后通过setDestination()设置。如果在目标地址中设置的范围ID和index不同且都不为零,则操作系统将在哪个接口上发送数据报是未定义的。

setSender(address[, port=0])
Parameters:

设置与此数据报关联的发送方地址为address和端口号port。发送方地址和端口号通常在接收时由QUdpSocket设置,因此无需在接收到的数据报上调用此函数。

对于传出的数据报,此函数可用于设置数据报应携带的地址。地址 address 通常必须是分配给此机器的本地地址之一,可以使用 QNetworkInterface 获取。如果未设置,操作系统将根据目标选择最合适的地址。

端口号 port 必须是与套接字关联的端口号(如果有的话)。值 0 可以用来表示操作系统应选择端口号。

swap(other)
Parameters:

其他QNetworkDatagram

将此实例与 other 交换。