我想知道如何使用 RakNet 在客户端-服务器架构中向客户端发送数据包。在这个示例代码中,我们有这一行:
peer->Send(&bsOut,HIGH_PRIORITY,RELIABLE_ORDERED,0,packet->systemAddress,false);
但是,原型如下(来自接口类):
virtual uint32_t Send( const RakNet::BitStream * bitStream,
PacketPriority priority,
PacketReliability reliability,
char orderingChannel,
const AddressOrGUID systemIdentifier,
bool broadcast,
uint32_t forceReceiptNumber=0 )=0;
如您所见,第 5 个参数采用 AddressOrGUID,这意味着我们可以发送示例中的 SystemAddress,但也可以发送连接机器的唯一 GUID。
有一个函数叫做:
RakNet::GetSystemAddressFromGUID();
但我不确定 RakNet 是否使用它来转换我们可以作为参数发送的 GUID(我在 RakPeer(RakPeerInterface 的实现)中没有发现此方法的任何用途,而且我无法找到缓冲数据包的方式发送每个刻度)。
问题如下:
示例代码直接回复收到的数据包。然而,在游戏中,服务器必须发送信息而不接收来自客户端的数据包。所以我无法访问类似的东西
packet->systemAddress
因为没有收到数据包。
所以我必须在我的 Player 类中存储一些东西才能知道如何向他们发送数据包:SystemAddress 或 RakNetGUID。与 SystemAddress 相比,RakNetGUID 的存储更简单、更轻。
但是,如果 RakNet 使用 GetSystemAddressFromGUID(),则不值得,因为它具有 O(log(n)) 算法。
我是否需要自己为每个 Player 存储 SystemAddress 或 RakNet::Send() 不将此方法与 RakNetGUID 一起使用?
谢谢!