当前位置: 首页>前端>正文

unity680 做raid5和raid6优劣势 unity ipv6

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

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

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进行了支持。

http://blogs.unity3d.com/2016/05/10/unity-and-ipv6-support/

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

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

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

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

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

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

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

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

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

//使用Socket
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//使用tcpClient
client = new TcpClient(AddressFamily.InterNetwork);



这就是IPV4 !!

IPV6是这样写的

//使用Socket
socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
//使用tcpClient
client = new TcpClient(AddressFamily.InterNetworkV6);


所以,该怎么办呢?

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

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

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

其中之一就是  Dns.GetHostAddress 。

如下代码


[csharp]  view plain  copy



    1. 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


    1. address[0].AddressFamily==AddressFamily.InterNetworkV6

    这样就可以判断是IPV6 还是 IPV4了。

    下面是完整代码:


    [csharp]  view plain  copy

    1. using UnityEngine;  
    2. using System.Collections;  
    3. using System.Net;  
    4. using System;  
    5. using System.Net.Sockets;  
    6.   
    7. public class NewBehaviourScript : MonoBehaviour {  
    8.   
    9. // Use this for initialization  
    10. void Start () {  
    11.       
    12.     }  
    13.       
    14. void OnGUI()  
    15.     {  
    16. if(GUI.Button(new Rect(100,100,300,300),"Connect"))  
    17.         {  
    18. "Connect 0");  
    19.   
    20. "test.thisisgame.com.cn");   
    21.   
    22. //IPAddress[] address = Dns.GetHostAddresses("115.35.88.130");  
    23.   
    24. foreach (var info in address)  
    25.             {  
    26.                 Debug.Log(info);  
    27.             }  
    28.   
    29.   
    30. null;  
    31. if (address[0].AddressFamily==AddressFamily.InterNetworkV6)  
    32.             {  
    33. "Connect InterNetworkV6");  
    34. new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);  
    35.             }  
    36. else  
    37.             {  
    38. "Connect InterNetwork");  
    39. new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
    40.             }  
    41.             socket.Connect(address, 56003);  
    42.   
    43. "Connect Success");  
    44.         }  
    45.     }  
    46.   
    47.   
    48. // Update is called once per frame  
    49. void Update () {  
    50.       
    51.     }  
    52. }

    转自 http://www.thisisgame.com.cn

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

    至此。

    其它一些问题。

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

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


    unity680 做raid5和raid6优劣势 unity ipv6,unity680 做raid5和raid6优劣势 unity ipv6_unity,第1张

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

    首先看看MAC是否 联网

    然后看看MAC是否开了VPN

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

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


    unity680 做raid5和raid6优劣势 unity ipv6,unity680 做raid5和raid6优劣势 unity ipv6_ios_02,第2张

    这个错误是由于 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到最新版本!


    unity680 做raid5和raid6优劣势 unity ipv6,unity680 做raid5和raid6优劣势 unity ipv6_ios_03,第3张

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

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

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


    unity680 做raid5和raid6优劣势 unity ipv6,unity680 做raid5和raid6优劣势 unity ipv6_ios_04,第4张

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


    unity680 做raid5和raid6优劣势 unity ipv6,unity680 做raid5和raid6优劣势 unity ipv6_ipv4_05,第5张

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


    unity680 做raid5和raid6优劣势 unity ipv6,unity680 做raid5和raid6优劣势 unity ipv6_NAT64_06,第6张

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


    unity680 做raid5和raid6优劣势 unity ipv6,unity680 做raid5和raid6优劣势 unity ipv6_ipv4_07,第7张

    现在用手机连接看看吧!


    https://www.xamrdz.com/web/23x1961664.html

    相关文章: