Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

PacketPeer

继承: RefCounted < Object

派生: ENetPacketPeer, MultiplayerPeer, PacketPeerDTLS, PacketPeerExtension, PacketPeerStream, PacketPeerUDP, WebRTCDataChannel, WebSocketPeer

基于包的协议的抽象和基类。

描述

PacketPeer 是基于数据包的协议(如 UDP)的抽象和基类。它提供了用于发送和接收数据包的 API,可以发送原始数据或变量。这使得在协议之间传输数据变得容易,不必将数据编码为低级字节或担心网络排序问题。

注意:导出到安卓时,在导出项目、或使用一键部署之前,请务必在安卓导出预设中,开启 INTERNET 权限。否则,任何类型的网络通信,都将被 Android 阻止。

属性

int

encode_buffer_max_size

8388608

方法

int

get_available_packet_count ( ) const

PackedByteArray

get_packet ( )

Error

get_packet_error ( ) const

Variant

get_var ( bool allow_objects=false )

Error

put_packet ( PackedByteArray buffer )

Error

put_var ( Variant var, bool full_objects=false )


属性说明

int encode_buffer_max_size = 8388608

  • void set_encode_buffer_max_size ( int value )

  • int get_encode_buffer_max_size ( )

编码 Variant 时允许的最大缓冲区大小。提高此值以支持更大的内存分配。

put_var 方法在栈上分配内存,使用的缓冲区将自动增长到最接近的二次方,以匹配 Variant 的大小。如果 Variant 大于 encode_buffer_max_size,则该方法将以 @GlobalScope.ERR_OUT_OF_MEMORY 出错。


方法说明

int get_available_packet_count ( ) const

返回环形缓冲区中当前可用的数据包数。


PackedByteArray get_packet ( )

获取原始数据包。


Error get_packet_error ( ) const

返回最后接收的数据包的错误状态(通过 get_packetget_var)。


Variant get_var ( bool allow_objects=false )

获取 Variant。如果 allow_objectstrue,则允许解码出对象。

在内部,这使用与 @GlobalScope.bytes_to_var 方法相同的解码机制。

警告:反序列化出的对象可能包含会被执行的代码。如果序列化的对象来自不受信任的来源,请不要使用此选项,以避免潜在的安全威胁,例如远程代码执行。


Error put_packet ( PackedByteArray buffer )

发送一个原始数据包。


Error put_var ( Variant var, bool full_objects=false )

Variant 作为数据包发送。如果 full_objectstrue,则允许将对象编码(其中可能包含代码)。

在内部,这使用与 @GlobalScope.var_to_bytes 方法相同的编码机制。