【发布时间】:2015-10-14 04:30:06
【问题描述】:
我想知道如何使用 RakNet 在客户端-服务器架构中向客户端发送数据包。在这个sample code 中,我们有这行:
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)) 算法。
我是否需要自己为每个玩家存储 SystemAddress 或 RakNet::Send() 不使用此方法和 RakNetGUID ?
谢谢!
【问题讨论】:
标签: c++ networking packet raknet