你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Unity 支持 IPV6 (IOS)

Unity 支持 IPV6 (IOS)

編輯:IOS開發綜合

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

這兩天我也在弄這事,還比較糾結。

一開始我以為只要更新Unity,然後在MAC上共享出來 NAT64 網絡就可以了,後面發現不是這麼回事。

Unity的這次更新只是新增了對IPV6的支持,這是什麼意思?

就是說Unity只是改了API,能支持IPV6的網絡了,但是你們之前指定了使用IPV4,那Unity也不會自動幫你們改成IPV6.

 

我們之前的項目,如果是指定了IPV4的,還是要手動添加對IPV6的兼容!

也就是說既要考慮到 IPV4的網絡支持,又要考慮到 IPV6 的網絡支持。

 

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

 

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

然後底層API,比如Socket,我們之前一般是這樣寫

 

socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

這就是IPV4 !!

 

 

IPV6是這樣寫的

 

socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);


 

所以,該怎麼辦呢?

直接從IPV4改成IPV6嗎?那IPV4的網絡下就悲劇了。

所以我們要判斷下當前是IPV4還是IPV6的網絡環境。

 

這裡要說到Unity 新增的對IPV6的支持。

其中之一就是 Dns.GetHostAddress 。

如下代碼

 

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。

 

address[0].AddressFamily==AddressFamily.InterNetworkV6

這樣就可以判斷是IPV6 還是 IPV4了。

 

 

下面是完整代碼:

 

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狀態,一個箭頭,代表正在共享網絡

\

 

 

現在用手機連接看看吧!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved