RakNet--Router2
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对象来访问远端系统。 |
![]() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步