青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

戰魂小筑

討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

蘋果要求在2016年6月1日后新的app必須支持ipv6網絡, 技術發展靠蘋果果然沒錯, 但開發者還是要開始忙起來了
這里介紹下Unity3D的適配的一些經驗

基本注意點

  • ios ipv6適配無需修改服務器, 也就是說, 如果你的服務器依然是ipv4的也是可以使用的
  • 蘋果的適配方案是將ipv4的地址轉換為ipv6, 到了路由層再轉回去繼續利用ipv4網絡傳輸

測試網絡環境搭建

轉載請注明:http://m.shnenglu.com/sunicdavy戰魂小筑

網上有很多翻譯了蘋果官方的搭建ipv6測試網絡環境的文章, 例如:
http://www.cocoachina.com/ios/20160525/16431.html
注意以下幾點

  • 無需路由器支持ipv6, 但貓(modem)必須要支持ipv6. 因為現在大多數都是光貓
    以下截圖是光貓管理端
    3440e3f9-12de-435b-85ab-a7a3be8b384b[6]
    光貓里的ipv6支持默認是關閉的, 所以需要手動打開, 按默認值配置即可

  • 請確認mac os系統必須是osx 10.11以后的版本才可以打開NAT64

  • 正確連接mac的ios設備應是如下截圖示意
    91f54476-4b5d-4585-a364-0da2139774c1[6]

  • 默認連接上wifi時看連接信息時, 一般只會有紅色DNS地址或者根本不顯示
  • 只有在第一次訪問網絡, 例如打開瀏覽器進入任意網站時, 才會顯示上面的幾條信息
  • 如果只有DNS沒有IP地址和子網掩碼, 一般是光貓沒有打開ipv6的DHCP, 沒有分配IP
  • 還有一種測試ipv6 DHCP是否正常工作的方法: 關閉NAT64時可以上網, 但打開NAT64無法上網

轉載請注明:http://m.shnenglu.com/sunicdavy戰魂小筑

Unity3D的Socket適配

WWW類本身已經支持了IPV6, 無需處理, 這里講解使用C#原生Socket的處理

  • 測試用的設備的iOS版本必須是9.3以上的
  • Socket構造時, AddressFamily 設置為InterNetworkV6時只支持ipv6網絡, 傳入InterNetwork時只支持ipv4網絡
  • 4.7.2和5.4.3的當前版本在mono層并未支持ipv6代碼適配的核心函數getaddrinfo, 因此需要通過oc層做轉換, 以下是代碼
    這段代碼將getaddrinfo的地址轉換成一個完整字符串, 格式是:
    ipv4|ipv4地址|ipv6|ipv6地址|

P.S. copyStr這種用法參考了http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/
會造成內存泄露, 如果有更好的方法歡迎反饋

轉載請注明:http://m.shnenglu.com/sunicdavy戰魂小筑

iosaddrinfo.mm

   1:  #include <sys/socket.h>
   2:  #include <netdb.h>
   3:  #include <arpa/inet.h>
   4:  #include <err.h>
   5:  #define OUTSTR_SIZE 4096
   6:  extern "C"
   7:  {
   8:      const char* copyStr( const char* str )
   9:      {
  10:          char* s = (char*)malloc(strlen(str) + 1);
  11:          strcpy(s, str);
  12:          return s;
  13:      }
  14:      const char* IOSGetAddressInfo(const char *host )
  15:      {
  16:          if( NULL == host )
  17:              return copyStr("ERROR_HOSTNULL");
  18:          char outstr[OUTSTR_SIZE];
  19:          struct addrinfo hints, *res, *res0;
  20:          memset(&hints, 0, sizeof(hints));
  21:          hints.ai_family = PF_UNSPEC;
  22:          hints.ai_socktype = SOCK_STREAM;
  23:          hints.ai_flags = AI_DEFAULT;
  24:          printf("getaddrinfo: %s\n", host);
  25:          int error = getaddrinfo(host, "http", &hints, &res0);
  26:          if (error != 0 )
  27:          {
  28:              printf("getaddrinfo: %s\n", gai_strerror(error));
  29:              return copyStr("ERROR_GETADDR");
  30:          }
  31:          memset( outstr, 0, sizeof(char)*OUTSTR_SIZE );
  32:          struct sockaddr_in6* addr6;
  33:          struct sockaddr_in* addr;
  34:          const char* solvedaddr;
  35:          char ipbuf[32];
  36:          for (res = res0; res; res = res->ai_next)
  37:          {
  38:              if (res->ai_family == AF_INET6)
  39:              {
  40:                  addr6 =( struct sockaddr_in6*)res->ai_addr;
  41:                  solvedaddr = inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, sizeof(ipbuf));
  42:                  strcat ( outstr, "ipv6|");
  43:                  strcat ( outstr, solvedaddr);
  44:              }
  45:              else
  46:              {
  47:                  addr =( struct sockaddr_in*)res->ai_addr;
  48:                  solvedaddr = inet_ntop(AF_INET, &addr->sin_addr, ipbuf, sizeof(ipbuf));
  49:                  strcat ( outstr, "ipv4|");
  50:                  strcat ( outstr, solvedaddr);
  51:              }
  52:              strcat ( outstr, "|");
  53:          }
  54:          return copyStr(outstr);
  55:      }
  56:  }
轉載請注明:http://m.shnenglu.com/sunicdavy戰魂小筑

iosaddrinfo.h

   1:  #pragma once
   2:  extern "C"{
   3:      const char* IOSGetAddressInfo(const char *host );
   4:  }
  • C#層的處理假設多個地址中都是統一的地址類型,要么全是v4要么全是v6
    返回給定的host內多個IP地址, 可以供處理復雜的北網通,南電信問題

   1:  using System;
   2:  using System.Net;
   3:  using System.Net.Sockets;
   4:  using System.Runtime.InteropServices;
   5:  using UnityEngine;
   6:  using System.Collections;
   7:  using System.Collections.Generic;
   8:  public class IOSIPV6
   9:  {
  10:      [DllImport("__Internal")]
  11:      private static extern string IOSGetAddressInfo(string host );  
  12:      public static IPAddress[] ResolveIOSAddress(string host, out AddressFamily af)
  13:      {
  14:          af = AddressFamily.InterNetwork;
  15:          var outstr = IOSGetAddressInfo(host);
  16:          Debug.Log("IOSGetAddressInfo: " + outstr);
  17:          if (outstr.StartsWith ("ERROR")) 
  18:          {
  19:              return null;
  20:          }
  21:          var addressliststr = outstr.Split('|');
  22:          var addrlist = new List<IPAddress>();
  23:          foreach (string s in addressliststr)
  24:          {
  25:              if (String.IsNullOrEmpty(s.Trim()))
  26:                  continue;
  27:              switch( s )
  28:              {
  29:                  case "ipv6":
  30:                      {                        
  31:                          af = AddressFamily.InterNetworkV6;
  32:                      }
  33:                      break;
  34:                  case "ipv4":
  35:                      {
  36:                          af = AddressFamily.InterNetwork;
  37:                      }
  38:                      break;
  39:                  default:
  40:                      {
  41:                          addrlist.Add(IPAddress.Parse(s));
  42:                      }
  43:                      break;
  44:              }
  45:          }
  46:          return addrlist.ToArray();
  47:      }
  48:  }
轉載請注明:http://m.shnenglu.com/sunicdavy戰魂小筑

參考鏈接

官方文檔
https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW1

某人的解決方案
http://www.codeinsect.net/blog/2016/05/26/unity-ipv6-socket-%E6%94%AF%E6%8C%81%EF%BC%8C%E5%B7%B2%E6%B5%8B%E8%AF%95%E9%80%9A%E8%BF%87/
注意, 此方案中的方法可用, 但是地址并不能解決南北互通的問題

posted on 2016-06-16 14:18 戰魂小筑 閱讀(5373) 評論(0)  編輯 收藏 引用 所屬分類: 游戲開發技術移動開發Unity3D
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区在线免费播放| 久久综合激情| 国产色综合天天综合网| 欧美成人一品| 久久激情五月丁香伊人| 欧美 日韩 国产一区二区在线视频 | 亚洲专区免费| 艳女tv在线观看国产一区| 经典三级久久| 欧美视频在线看| 欧美在线观看视频一区二区三区| 一区三区视频| 激情综合亚洲| 亚洲国产精品一区二区第四页av| 国产亚洲制服色| 国产亚洲精品aa| 国产一区二区三区自拍| 国产精品普通话对白| 美女主播一区| 国内精品久久久久久久果冻传媒| 一本大道久久a久久精品综合| 亚洲第一黄色网| 洋洋av久久久久久久一区| 亚洲精品中文在线| 亚洲女女女同性video| 亚洲欧美视频在线| 中日韩视频在线观看| 亚洲一区二区三区视频播放| 亚洲国产第一| 在线一区免费观看| 欧美福利视频在线观看| 国产乱肥老妇国产一区二| 亚洲成色精品| 西西人体一区二区| 久久久久久夜精品精品免费| 久久夜色精品国产欧美乱| 美日韩精品视频| 欧美资源在线| 国产一区二区三区高清在线观看 | 欧美黄色日本| 日韩视频永久免费| 一区二区三区在线视频播放| 另类成人小视频在线| 亚洲小视频在线观看| 欧美日本国产| 亚洲国产成人tv| 欧美高清视频一区二区| 亚洲精品少妇网址| 欧美精品免费在线观看| 亚洲五月六月| 亚洲欧美乱综合| 欧美私人啪啪vps| 亚洲最新视频在线播放| 亚洲精品美女在线观看| 快she精品国产999| 国产一区清纯| 在线亚洲+欧美+日本专区| 亚洲一二三四久久| 国产欧美精品久久| 久久天天躁夜夜躁狠狠躁2022 | 亚洲精品久久久久久一区二区| 欧美激情综合色综合啪啪| 亚洲一区二区三区在线看| 亚洲小视频在线观看| 国产一区自拍视频| 欧美xxxx在线观看| 国产一区二区三区无遮挡| 亚洲伦理久久| 国产伊人精品| 99这里只有久久精品视频| 国产精品扒开腿做爽爽爽视频 | 亚洲欧美日韩在线一区| 国产精品亚洲综合久久| 亚洲欧美一区二区三区久久 | 久久www免费人成看片高清 | 亚洲私人影院在线观看| 激情av一区| 亚洲人成亚洲人成在线观看图片 | 午夜一级在线看亚洲| 亚洲成人在线视频播放| 亚洲欧美日韩电影| 91久久精品一区| 欧美日韩国产一中文字不卡| 免费成人小视频| 国产精品欧美日韩一区二区| 麻豆精品在线视频| 欧美日韩一区二区三区在线看| 中文日韩电影网站| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产一区二区三区在线观看网站 | 亚洲特级毛片| 亚洲经典视频在线观看| 欧美a级片网站| 欧美日韩一区二区三区免费| 亚洲成色www8888| 亚洲激情社区| 久久久.com| 女人香蕉久久**毛片精品| 国产精品久久久久天堂| 先锋影院在线亚洲| 久久精品日产第一区二区| 欧美视频在线观看免费| 亚洲一区二区在线免费观看| 亚洲免费在线视频| 国产一区在线观看视频| 久久久久久综合| 久久九九免费视频| 亚洲国产影院| 亚洲免费视频中文字幕| 国产婷婷色一区二区三区在线 | 欧美午夜美女看片| 夜夜爽av福利精品导航| 久久影院午夜论| 亚洲尤物视频网| 最新国产乱人伦偷精品免费网站 | 久久国产精品一区二区| 欧美在线观看视频一区二区| 亚洲国产欧美一区| 在线播放豆国产99亚洲| 国产一区二区三区的电影| 欧美亚洲第一区| 国产精品国产三级国产专播精品人| 麻豆精品视频在线| 欧美成人免费视频| 欧美区在线播放| 欧美黄在线观看| 欧美性事在线| 国产午夜亚洲精品不卡| 亚洲精品国产精品国产自| 亚洲经典一区| 亚洲一区二区三区久久| 欧美精品激情在线| 久久婷婷麻豆| 亚洲国产小视频在线观看| 亚洲网站在线播放| 国产精品网站在线| 免费观看一级特黄欧美大片| 欧美~级网站不卡| 亚洲图色在线| 国产一区二区丝袜高跟鞋图片 | 美女性感视频久久久| 亚洲一区999| 9l视频自拍蝌蚪9l视频成人| 一区二区三区精品国产| 亚洲欧美一区二区激情| 欧美 日韩 国产在线| 国产精品观看| 亚洲国产精品尤物yw在线观看| 亚洲欧美一区二区原创| 91久久精品国产91久久性色| 日韩视频免费大全中文字幕| 性xx色xx综合久久久xx| 欧美电影免费观看| 欧美中文字幕| 欧美精品久久久久a| 国产精品免费在线| 在线看日韩欧美| 亚洲六月丁香色婷婷综合久久| 亚洲精品护士| 亚洲精品极品| 免费亚洲一区二区| 国产一区二区三区直播精品电影| a4yy欧美一区二区三区| 亚洲精品一区二区网址 | av成人国产| 亚洲黄色性网站| 亚洲毛片在线看| 欧美91福利在线观看| 在线亚洲+欧美+日本专区| 国产乱码精品1区2区3区| 欧美在线亚洲在线| 欧美一区二区| 激情欧美日韩一区| 亚洲乱码国产乱码精品精可以看| 亚洲免费视频成人| 亚洲午夜女主播在线直播| 国产精品网曝门| 99国产一区二区三精品乱码| 一道本一区二区| 亚洲国产成人av| 亚洲欧美在线另类| 禁断一区二区三区在线| 亚洲第一在线综合在线| 国产精品久久久亚洲一区| 亚洲人成网站在线观看播放| 欧美日韩综合一区| 欧美成人免费小视频| 国产视频久久| 日韩视频二区| 国产一区深夜福利| 久久xxxx精品视频| 久久躁狠狠躁夜夜爽| 亚洲无毛电影| 欧美成年人视频| 久久九九精品99国产精品| 欧美精品18+| 免费不卡在线观看| 一区视频在线| 亚洲午夜视频在线| 亚洲婷婷国产精品电影人久久|