RakNet--IPV6 support

Jenkins Software

IPv6支持以及与IPv4的不同

    IPv6是下一代使用的IP地址。由于可用的IPv4地址已经用尽,需要开发具有更大地址空间的IPv6。整个网络工业会逐渐转向使用IPv6,因此有必要使RakNet支持IPv6以满足将来的应用。

       IPv4使用4字节代表IP地址,使用符号表示就是127.0.0.1IPv6使用16字节,使用如下的标记形式:fe80::7c:31f7:fec4:27de。将RakNetDefines.h中的RAKNET_SUPPORT_IPV6设置为1,这个设置是默认的,对IPv6的支持将编译进RakNet

       IPv4的环回地址是127.0.0.1IPv6的环回地址是::1IPv4的广播地址是255.255.255.255IPv6不支持广播。如果将路由设置为不支持多播,那么IPv6也不支持多播。IPv6中没有默认的多播地址,如果终端用户不进行手动设置,LANServerDiscovery插件将不能使用。

       使用了IPv6NAT穿透也没有必要使用了。假设你知道系统的IP地址,由于不存在NAT,每一个主机都有自己唯一的IP地址,即使这个系统处于路由之后,你也可以直接连接到该系统上。

       IPv4 sockets/ IP 地址不能连接到IPv6 sockets/IP地址,反过来也一样,IPv6也无法连接IPv4

       如果一个socket使用IPv4,一个socket使用IPv6,那么在同一个端口上启动两个socket也是可以的。下面代码片段说明如何实现。

 

支持IPv6

       这一段代码来自于ChatExampleServer工程。如果可能的话,它启动了两个socket,第二个socket支持IPv6。并不是所有的操作系统默认支持IPv6,或有些系统更本就不支持IPv6,因此退一步来说使用IPv4还是很有必要的。

 

      RakNet::SocketDescriptor socketDescriptors[2];

       socketDescriptors[0].port=atoi(portstring);

       socketDescriptors[0].socketFamily=AF_INET; // Test out IPV4

       socketDescriptors[1].port=atoi(portstring);

       socketDescriptors[1].socketFamily=AF_INET6; // Test out IPV6

       bool b = server->Startup(4, socketDescriptors, 2 )==RakNet::RAKNET_STARTED;

       server->SetMaximumIncomingConnections(4);

       if (!b)

       {

              printf("Failed to start dual IPV4 and IPV6 ports. Trying IPV4 only.\n");

              // Try again, but leave out IPV6
              b = server->Startup(4, socketDescriptors, 1 )==RakNet::RAKNET_STARTED;

              if (!b)

              {

                     puts("Server failed to start. Terminating.");

                     exit(1);

              }

       }

 

       正如上述代码所示,要想使用IPv6就要设置SocketDescriptorsocketFamily成员的值为AF_INET6。默认值为AF_INET,这个值是使用IPv4所需要使用的值。

       注:在写本篇文档时,RakNet的控制台还不支持IPv6

See Also

 

Index

posted @ 2012-09-16 21:51  杂草  阅读(542)  评论(0编辑  收藏  举报