RakNet--Router2

Jenkins Software

 Router2 概览

通过中间系统发送消息

 

       Router2可以再没有直接相连的系统之间路由数据报,它需要使用第三个系统的带宽,要求两个系统都要与第三个系统相连。当希望使用完全连接网拓扑时,但是由于路由和/或防火墙的原因不能建立完全连接,这个插件非常有用。由于远端系统的系统地址是中间系统的地址,那么需要使用RakNetGUID对象来访问系统,包括其他的插件。

 

使用

       1. Router2插件附加到每一个系统上。

       2. 使用目的系统的RakNetGUID对象调用EstablishRouting函数。

       3. 消息将被广播到所有连接的RakPeer实例上。每一个运行了Router2插件的RakPeer,如果任何人连接到了目标系统,需要查询连接列表,那个用户被连接到了目标系统。

       5. 在查询了所有的系统后,ping值最小的系统,也即转发最少连接的系统,会启动UDPForwarder而系统,返回ID_ROUTER_2_FORWARDING_ESTABLISHED。如果没有可用的路径,返回ID_ROUTER_2_FORWARDING_NO_PATH

 

       一旦建立起了一个路径,应该尝试连接到目标系统,做法与普通连接方法相同。样例代码如下:

     

  RakNet::BitStream bs(packet->data, packet->length, false);
       bs.IgnoreBytes(sizeof(MessageID));
       RakNetGUID endpointGuid;
       bs.Read(endpointGuid);
       unsigned short sourceToDestPort;
       bs.Read(sourceToDestPort);
       char ipAddressString[32];
       packet->systemAddress.ToString(false, ipAddressString);
       rakPeerInterface->EstablishRouting(ipAddressString, sourceToDestPort, 0,0);

 

 

       注意重新路由是自动进行的。当一个连接被重路由,你会得到ID_ROUTER_2_REROUTED返回值。SystemAddress地址已经改变,RakNetGUID不会改变。因此,当使用这个插件时,只能使用RakNetGUID对象来访问远端系统。

See Also

 

Index
NAT Traversal architecture
posted @ 2012-09-16 23:36  杂草  阅读(215)  评论(0编辑  收藏  举报