network_send_raw

该函数通过网络发送 " 原始 " 数据包。

该函数采用 网络套接字 ID 进行连接,然后您必须提供包含要发送的数据的 缓冲区 ( 有关缓冲区的更多信息,请参阅 参考- 缓冲区 ),最后是数据包的大小 (以字节为单位)。

发送的数据不会被 GameMaker 以任何方式格式化,接收设备将以流的形式获取数据,这意味着您必须自己处理它。请参阅: 数据包分离

该函数将返回已发送数据的字节数,如果发送失败,则返回小于 0 的数字。

警告 您不得在游戏中混合使用常规函数和原始函数,因为这样做会导致问题。这意味着,对于使用 network_connect 建立的连接,您必须使用 network_send_packet,而对于 network_connect_raw,则必须使用 network_send_raw.

注意 此函数使用类似 TCP 的套接字 (即 network_socket_tcp)。它也可能适用于其他套接字类型,但这不能保证。

选项参数

最后一个参数是可选的,仅与WebSockets一起使用。它允许您选择发送二进制数据还是文本数据。可以在此参数中指定以下任一常量:

网络发送类型常量
常量描述
network_send_binarySend a binary message
network_send_textSend a text message

某些平台的API在使用WebSockets(例如Twitch)时仅接受文本消息,因此network_send_text常量可用于此类情况。如果未指定此参数,则默认情况下会发送二进制数据。

 

语法:

network_send_raw(socket, bufferid, size, [options]);

参数类型描述
socketNetwork Socket ID要使用的套接字的ID。
bufferidBuffer从中获取数据的缓冲区。
sizeReal数据的大小(以字节表示)。
options网络发送类型常量可选 用于 WebSocket 在文本和二进制数据之间进行选择 ; 如果未指定,则发送二进制数据。

 

返回:

Real

 

例子:

buff = buffer_load("player_save.dat");
network_send_raw(sock, buff, buffer_get_size(buff));

上述信息将之前保存的数据加载到内存中的缓冲区中,并将该缓冲区存储在变量 buff 中。然后,使用变量 sock 标识的套接字将这个完整的缓冲区作为原始数据包通过网络发送。