ESFramework 使用技巧 -- 兼容IPv6
随着互联网越来越普及,以及物联网的兴起,IPv4地址已远远不够用,IPv6的普及将是不可避免的趋势。最新版本的ESFramework(ESFramework v4.0.10.0、ESPlus v3.2.0.0)已经增加了对IPv6的支持。
首先,要了解两个最基础的事实:
(1)通信的双方,无论是服务端与客户端之间,或是客户端与客户端之间的P2P通信,必须使用相同的协议版本 -- 要么都是IPv4,要么都是IPv6。
(2)在没有特别安装附件的情况下,有的OS可能只支持IPv4,有的可能只支持IPv6,有的即支持IPv4也支持IPv6。可以通过Socket类的OSSupportsIPv6和OSSupportsIPv4属性来作判断。
1.服务端
基于ESFramework的服务端程序若需同时支持IPv4和IPv6,需要保证两点:
(1)服务器系统的网卡必需绑定至少一个IPv4地址和至少一个IPv6地址。
(2)IRapidServerEngine的IPAddressBinding属性设置为null。
当然,如果想让服务端仅仅对IPv6的客户端提供服务,可以将IPAddressBinding设置为网卡的IPv6地址;同理,如果想让服务端仅仅对IPv4的客户端提供服务,可以将IPAddressBinding设置为网卡的IPv4地址。
2.客户端
基于ESFramework的客户端程序在升级兼容IPv6时,要稍作改动。
我们现在假设服务端程序已经兼容了IPv6,并且其提供服务的IPv4地址为192.168.0.104,IPv6地址为fe80::14d8:a209:89e6:c162%14。
那么基于ESFramework的客户端在与服务端建立连接之前,要看本地OS对IPv4和IPv6的支持情况:
(1)如果本地OS仅支持IPv4,或者同时支持IPv4和IPv6,那么简单地,就让其连接到服务器的IPv4地址。
(2)如果本地OS仅支持IPv6,那么,就让其连接到服务器的IPv6地址。
示例代码如下所示:
RapidPassiveEngine rapidPassiveEngine = new RapidPassiveEngine();
if (Socket.OSSupportsIPv4)
{
LogonResponse logonResponse = rapidPassiveEngine.Initialize("userID", "password", "192.168.0.104", 9900, null);
}
else if (Socket.OSSupportsIPv6)
{
LogonResponse logonResponse = rapidPassiveEngine.Initialize("userID", "password", "fe80::14d8:a209:89e6:c162%14", 9900, null);
}
else
{
throw new Exception("当前OS既不支持IPv4,也不支持IPv6。");
}
Q Q:168757008