StreamPeer

继承: RefCounted < Object

派生: StreamPeerBuffer, StreamPeerExtension, StreamPeerGZIP, StreamPeerTCP, StreamPeerTLS

与流交互的抽象基类。

描述

StreamPeer 是一种抽象基类,常用于流式协议(例如 TCP)。它提供了通过流发送数据的 API,将数据作为原始数据或字符串处理。

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

属性

bool

big_endian

false

方法

int

get_8()

int

get_16()

int

get_32()

int

get_64()

int

get_available_bytes() const

Array

get_data(bytes: int)

float

get_double()

float

get_float()

Array

get_partial_data(bytes: int)

String

get_string(bytes: int = -1)

int

get_u8()

int

get_u16()

int

get_u32()

int

get_u64()

String

get_utf8_string(bytes: int = -1)

Variant

get_var(allow_objects: bool = false)

void

put_8(value: int)

void

put_16(value: int)

void

put_32(value: int)

void

put_64(value: int)

Error

put_data(data: PackedByteArray)

void

put_double(value: float)

void

put_float(value: float)

Array

put_partial_data(data: PackedByteArray)

void

put_string(value: String)

void

put_u8(value: int)

void

put_u16(value: int)

void

put_u32(value: int)

void

put_u64(value: int)

void

put_utf8_string(value: String)

void

put_var(value: Variant, full_objects: bool = false)


属性说明

bool big_endian = false 🔗

  • void set_big_endian(value: bool)

  • bool is_big_endian_enabled()

true 时,该 StreamPeer 进行编解码时会使用大端格式。


方法说明

int get_8() 🔗

从流中获取有符号字节。


int get_16() 🔗

从流中获取有符号 16 位值。


int get_32() 🔗

从流中获取有符号 32 位值。


int get_64() 🔗

从流中获取有符号 64 位值。


int get_available_bytes() const 🔗

返回该 StreamPeer 可用的字节数。


Array get_data(bytes: int) 🔗

返回接收到的块数据。可以使用 bytes 参数设置所需接收的字节数。如果可用的字节数不足,函数会阻塞至接收到所需字节数为止。该函数返回两个值,一个 Error 错误码以及一个数据数组。


float get_double() 🔗

从流中获取一个双精度浮点数。


float get_float() 🔗

从流中获取一个单精度浮点数。


Array get_partial_data(bytes: int) 🔗

返回接收到的块数据。可以使用“bytes”参数设置所需接收的字节数。如果可用的字节数不足,函数会阻塞至接收到所需字节数为止。该函数返回两个值,一个 Error 错误码以及一个数据数组。


String get_string(bytes: int = -1) 🔗

从流中获取一个字节长度为 bytes 的 ASCII 字符串。如果 bytes 为负(默认),会按照 put_string 的逆向操作从流中读取长度。


int get_u8() 🔗

从流中获取一个无符号字节。


int get_u16() 🔗

从流中获取一个无符号 16 位值。


int get_u32() 🔗

从流中获取一个无符号 32 位值。


int get_u64() 🔗

从流中获取一个无符号 64 位值。


String get_utf8_string(bytes: int = -1) 🔗

从流中获取一个字节长度为 bytes 的 UTF-8 字符串(将发送的字符串解码为 UTF-8)。如果 bytes 为负(默认),会按照 put_utf8_string 的逆向操作从流中读取长度。


Variant get_var(allow_objects: bool = false) 🔗

从流中获取一个 Variant。如果 allow_objectstrue,则会允许解码出对象。

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

警告:反序列化的对象可能包含会被执行的代码。如果序列化的对象来自不可信的来源,请勿使用该选项,以免造成远程代码执行等安全威胁。


void put_8(value: int) 🔗

向流中放入一个有符号字节。


void put_16(value: int) 🔗

向流中放入一个有符号 16 位值。


void put_32(value: int) 🔗

向流中放入一个有符号 32 位值。


void put_64(value: int) 🔗

向流中放入一个有符号 64 位值。


Error put_data(data: PackedByteArray) 🔗

通过连接发送块数据,数据完成发送前会阻塞。该函数返回 Error 错误码。


void put_double(value: float) 🔗

向流中放入一个双精度浮点数。


void put_float(value: float) 🔗

向流中放入一个单精度浮点数。


Array put_partial_data(data: PackedByteArray) 🔗

通过连接发送数据。如果数据无法一次性发完,则仅会发送部分数据。该函数返回两个值,一个 Error 错误码以及一个整数,表示实际发送的数据量。


void put_string(value: String) 🔗

向流中放入一个以零结尾的 ASCII 字符串,会前置一个表示其大小的 32 位无符号整数。

注意:如果要放置 ASCII 字符串,而不前置大小,可以使用 put_data

GDScriptC#

  1. put_data("Hello world".to_ascii_buffer())
  1. PutData("Hello World".ToAsciiBuffer());

void put_u8(value: int) 🔗

向流中放入一个无符号字节。


void put_u16(value: int) 🔗

向流中放入一个无符号 16 位值。


void put_u32(value: int) 🔗

向流中放入一个无符号 32 位值。


void put_u64(value: int) 🔗

向流中放入一个无符号 64 位值。


void put_utf8_string(value: String) 🔗

向流中放入一个以零结尾的 UTF-8 字符串,前置一个表示其大小的 32 位无符号整数。

注意:如果要放置 UTF-8 字符串,而不前置其大小,可以使用 put_data

GDScriptC#

  1. put_data("Hello world".to_utf8_buffer())
  1. PutData("Hello World".ToUtf8Buffer());

void put_var(value: Variant, full_objects: bool = false) 🔗

向流中放入一个 Variant。如果 full_objectstrue,则会允许将对象编码(其中可能包含代码)。

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