什么是系统地址?
系统地址是网络中包含系统二进制IP地址和端口的结构体。这个结构体定义在RakNetTypes.h文件中,这里有一些你需要的系统地址的例子。
服 务器收到一个特定客户端的消息,同时想要中转给其他客户端。你需要在发送函数中指定发送者的系统地址(在Packet::systemAddress域中 给出),同时设置广播设置为true。游戏世界里的一些物品,例如前面提到的炸弹,属于一个特定的玩家,当炸弹被杀死后,你应该给出适当的个人得分。
当你在P2P网络中想发送一条信息给任何peer时。
功能函数:
ToString() —— 给出一个系统地址的结构,可以返回点分的IP地址(译者注:例如127.0.0.1)
FromString() —— 给出一个点分的IP地址,填充结构体的binaryAddress部分
重要的注意事项:
1. 数据包的接受方会自动知道任何发送数据包给自己的系统的系统地址,因为它可以从发送者的IP/Port组合中确定这个值。如果仅仅是为了让服务器知道系统 地址,发送者不需要对它自己数据结构体中的系统地址进行编码。原始发送者的系统地址在数据包结构体中会自动传递给开发人员,该结构体是从Receive函 数中返回的。
2.当使用C/S模式时,客户端无需知道数据包的原始发送者的系统四肢。客户端只关心所有从服务器发来的数据包。然后当你需要一个客户端知道令一个客户端的系统地址时,你需要在数据结构中填充SystemAddress域。可以让发送的客户端填充这个值,也可以让服务器从原始发送者那里接收数据包时填充它。
3.RakPeer 特定实例的系统地址在连接过程中不会改变,唯一的例外是Router2插件。然而所有的系统都是这样的(例如在对称NAT后的系统就不是这样的)。作为一 个独特的标识符,发现在数据包结构体中使用了rakNetGUID。RakPeerInterface中有操作RakNetGUID的函数。
4.当你涉及到远程系统时首选的是RakNetGUID远程系统,而不是SystemAddress。对于一个RakPeer来说RakNetGUID是惟一的标示符,然后SystemAddress却不是唯一的。同时如果你计划使用Router2插件,有必要专门使用RakNetGUID。
评论