Unity 支持 IPV6 (IOS)

xiaoxiao2021-02-28  97

版权声明:本文转自http://blog.csdn.net/huutu 转载请带上 http://www.thisisgame.com.cn

Apple 强制规定,6月份之后上架的APP  需要支持IPv6 。

Apple在开发者中心添加了完整的代码修改指导,以及 如何通过MAC 共享 IPV6 的Wifi ,如下网页

[html] view plain copy https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html  

翻到网页最下方的 To set up a local IPv6 Wi-Fi network using your Mac 就是MAC共享 IPV6 Wifi的方法(需要最新的OSX系统和IOS9.3 以上的系统支持)

Unity 也及时做出了响应,在最新的 4.7.2 以及同时期的 Unity5.3.x 版本中对 IPV6进行了支持。

[plain] view plain copy http://blogs.unity3d.com/2016/05/10/unity-and-ipv6-support/   转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

这两天我也在弄这事,还比较纠结。

一开始我以为只要更新Unity,然后在MAC上共享出来 NAT64 网络就可以了,后面发现不是这么回事。

Unity的这次更新只是新增了对IPV6的支持,这是什么意思?

就是说Unity只是改了API,能支持IPV6的网络了,但是你们之前指定了使用IPV4,那Unity也不会自动帮你们改成IPV6.

我们之前的项目,如果是指定了IPV4的,还是要手动添加对IPV6的兼容

也就是说既要考虑到 IPV4的网络支持,又要考虑到 IPV6 的网络支持。

首先,Unity官方强烈要求,一定要使用域名!!

按照Unity官方博客,上层API,如WWW,我们在使用的时候也没有做指定IPV4的操作,所以不用修改。

然后底层API,比如Socket,我们之前一般是这样写

[csharp] view plain copy socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);   这就是IPV4 !!

IPV6是这样写的

[csharp] view plain copy socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);  

所以,该怎么办呢?

直接从IPV4改成IPV6吗?那IPV4的网络下就悲剧了。

所以我们要判断下当前是IPV4还是IPV6的网络环境。

这里要说到Unity 新增的对IPV6的支持。

其中之一就是  Dns.GetHostAddress 。

如下代码

[csharp] view plain copy IPAddress[] address=Dns.GetHostAddresses("test.thisisgame.com.cn");    如果当前是 IPV6 的网络环境,这个函数会返回一个 IPV6 地址。

如果当前是 IPV4 的网络环境,这个函数会返回一个 IPV4 地址。

大家都知道 IPV6和IPV4是有很大不同的,IPV4是这样的 127.0.0.1 ,但是IPV6是这样 64:ff9b::7237:5342

所以我们可以判断下, GetHostAddress 返回的IP里面,如果带有 : 冒号,那么就是IPV6了,然后指定 Socket使用 IPV6就可以了。

那么其实,还有简单的方法,判断 IPAddress 的 AddressFamily。

[cpp] view plain copy address[0].AddressFamily==AddressFamily.InterNetworkV6   这样就可以判断是IPV6 还是 IPV4了。

下面是完整代码:

[csharp] view plain copy using UnityEngine;  using System.Collections;  using System.Net;  using System;  using System.Net.Sockets;    public class NewBehaviourScript : MonoBehaviour {        // Use this for initialization      void Start () {            }            void OnGUI()      {          if(GUI.Button(new Rect(100,100,300,300),"Connect"))          {              Debug.Log("Connect 0");                IPAddress[] address=Dns.GetHostAddresses("test.thisisgame.com.cn");                 //IPAddress[] address = Dns.GetHostAddresses("115.35.88.130");                foreach (var info in address)              {                  Debug.Log(info);              }                  Socket socket = null;              if (address[0].AddressFamily==AddressFamily.InterNetworkV6)              {                  Debug.Log("Connect InterNetworkV6");                  socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);              }              else              {                  Debug.Log("Connect InterNetwork");                  socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);              }              socket.Connect(address, 56003);                Debug.Log("Connect Success");          }      }          // Update is called once per frame      void Update () {            }  }   转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

服务端不用修改任何东西。

至此。

其它一些问题。

1、如何判断当前是IPV6网络?

当你的DNS是像下图中这样的时候,就是IPV6网络了,再用 Safari 打开 Apple 官网,如果能打开,就没问题。

2、已经是IPV6网络了,但是却打不开 Apple 官网?

首先看看MAC是否 联网

然后看看MAC是否开了VPN

关闭无线,打开重新连接,重复。

3、已经是IPV6网络,但是出现 Access Denied 错误

这个错误是由于 Socket 中仍然是指定IPV4模式引起的。应该判断当前是IPV4还是IPV6,如果是IPV6就指定Socket为IPV6模式,代码见正文附的代码。

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

3、出现 An address incompatible with the requested protocal was used,是因为没有升级Unity到最新版本!

附: MAC 共享 IPV6 WIFI方法(需要最新OSX 系统以及 IOS9.3.x 系统支持)

1、首先清除WIFI 连接记录,然后关闭WIFI,让MAC接入有线网。

2、按住 Option /Alt 键,点击 共享 ,打开网络共享界面

3、进入到 共享界面,选择 互联网共享,然后选择 共享以下来源的连接为 以太网 , 用以下端口共享给电脑选择 WIFI,就是把网线的网 通过WIFI 共享出去。

4、勾选互联网共享,开始共享网络转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

查看WIFI状态,一个箭头,代表正在共享网络

现在用手机连接看看吧!
转载请注明原文地址: https://www.6miu.com/read-41108.html

最新回复(0)