PacketPeer

继承: RefCounted < Object

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

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

描述

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

注意:导出到Android时,在导出项目或使用一键部署之前,请确保启用Android导出预设中的INTERNET权限。否则,任何形式的网络通信都将被Android阻止。

属性

方法


属性说明

int encode_buffer_max_size = 8388608 🔗

  • void set_encode_buffer_max_size(value: int)

  • int get_encode_buffer_max_size()

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

put_var()方法在堆栈上分配内存,使用的缓冲区会自动增长到最接近的2次方,以匹配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_packet()get_var())。


Variant get_var(allow_objects: bool = false) 🔗

获取变体。如果allow_objectstrue,则允许解码对象。

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

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


Error put_packet(buffer: PackedByteArray) 🔗

发送原始数据包。


Error put_var(var: Variant, full_objects: bool = false) 🔗

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

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