class QNetworkDatagram#

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

摘要#

方法#

注意

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

详细说明#

  • 有效载荷数据;

  • 发送方的地址和端口号;

  • 目标地址和端口号;

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

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

通常,当向之前接收到的数据包发送数据报时,需要将 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__(data[, destinationAddress=QHostAddress()[, port=0]])#
参数::

创建一个QNetworkDatagram对象,并将数据作为有效载荷数据,以及将destinationAddressport作为数据报的目的事实地址。

__init__(other)
参数::

otherQNetworkDatagram

创建一个副本,包括有效载荷和元数据。

要创建一个适当的回复数据报,请使用makeReply()

__init__(

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

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

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

clear(#

清除这个QNetworkDatagram对象中的有效载荷数据和元数据,将它们重置到默认值。

data(#
返回类型:

QByteArray

返回该数据报的数据有效载荷。对于从网络接收到的数据报,它包含数据报的有效载荷。对于要发送的数据报,它是将要发送的数据报。

请注意,可以通过不传输数据来传输数据报,因此返回的QByteArray可能为空。

另请参见

setData()

destinationAddress(#
返回类型:

QHostAddress

返回与此数据报关联的目的地址。对于一个从网络接收到的数据报,它是对等节点发送数据报的地址,可以是此机器的本地地址、多播或广播地址。对于即将发送的数据报,它是应该发送到的地址。

如果没有在数据报上设置目的地址,返回的对象将对isNull() 报告为 true。

destinationPort()#
返回类型:

int

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

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

hopLimit()#
返回类型:

int

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

如果此数据报是从网络接收到的,这是接收后数据报的剩余跳数,并且在每个转发此数据包的节点上减少 1。-1 的值表示无法获取跳数限制计数。

如果这是一个即将发送的数据报,这是发送时应在 IP 头部设置的值。-1 的值表示操作系统应选择此值。

另请参见

setHopLimit()

interfaceIndex()#
返回类型:

int

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

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

值 0 表示接口索引未知。

另请参见

setInterfaceIndex()

isNull()#
返回类型:

bool

如果此QNetworkDatagram对象为null,则返回true。此函数是isValid()函数的相反。

isValid()#
返回类型:

bool

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

makeReply(payload)#
参数::

payloadQByteArray

返回类型:

QNetworkDatagram

senderAddress()#
返回类型:

QHostAddress

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

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

senderPort()#
返回类型:

int

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

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

setData(data)#
参数::

数据QByteArray

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

由于数据报文可以空,一个空的QByteArray确实是用于data的合法值。

另请参见

data()

setDestination(address, port)#
参数::

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

对于发出的数据报文,此函数可以用来设置数据报文应该发送的地址。这可能是一个用于与对等设备通信的单播地址,或者是一个用于发送到多个设备的广播或多播地址。

setHopLimit(count)#
参数::

count – int

将与此数据报文关联的跳数限制设置为count。跳数限制是在IP数据包在超时前可以转发的节点数,如果超时会返回错误给数据报文的发送者。在IPv4中,此值通常被称为“生存时间”(TTL)。

通常不需要在网络接受到的数据报文上调用此函数。

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

另请参见

hopLimit()

setInterfaceIndex(index)#
参数::

index – int

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

通常不需要在网络接受到的数据报文上调用此函数。

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

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

setSender(address[, port=0])#
参数::

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

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

端口号 port 必须是与之相关的套接字的端口号,如果有。可以使用 0 的值来指示操作系统选择端口号。

swap(other)#
参数::

otherQNetworkDatagram

与此实例交换 other