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

戰(zhàn)魂小筑

討論群:309800774 知乎關(guān)注:http://zhihu.com/people/sunicdavy 開(kāi)源項(xiàng)目:https://github.com/davyxu

   :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評(píng)論 :: 0 Trackbacks

蘋(píng)果要求在2016年6月1日后新的app必須支持ipv6網(wǎng)絡(luò), 技術(shù)發(fā)展靠蘋(píng)果果然沒(méi)錯(cuò), 但開(kāi)發(fā)者還是要開(kāi)始忙起來(lái)了
這里介紹下Unity3D的適配的一些經(jīng)驗(yàn)

基本注意點(diǎn)

  • ios ipv6適配無(wú)需修改服務(wù)器, 也就是說(shuō), 如果你的服務(wù)器依然是ipv4的也是可以使用的
  • 蘋(píng)果的適配方案是將ipv4的地址轉(zhuǎn)換為ipv6, 到了路由層再轉(zhuǎn)回去繼續(xù)利用ipv4網(wǎng)絡(luò)傳輸

測(cè)試網(wǎng)絡(luò)環(huán)境搭建

轉(zhuǎn)載請(qǐng)注明:http://m.shnenglu.com/sunicdavy戰(zhàn)魂小筑

網(wǎng)上有很多翻譯了蘋(píng)果官方的搭建ipv6測(cè)試網(wǎng)絡(luò)環(huán)境的文章, 例如:
http://www.cocoachina.com/ios/20160525/16431.html
注意以下幾點(diǎn)

  • 無(wú)需路由器支持ipv6, 但貓(modem)必須要支持ipv6. 因?yàn)楝F(xiàn)在大多數(shù)都是光貓
    以下截圖是光貓管理端
    3440e3f9-12de-435b-85ab-a7a3be8b384b[6]
    光貓里的ipv6支持默認(rèn)是關(guān)閉的, 所以需要手動(dòng)打開(kāi), 按默認(rèn)值配置即可

  • 請(qǐng)確認(rèn)mac os系統(tǒng)必須是osx 10.11以后的版本才可以打開(kāi)NAT64

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

  • 默認(rèn)連接上wifi時(shí)看連接信息時(shí), 一般只會(huì)有紅色DNS地址或者根本不顯示
  • 只有在第一次訪問(wèn)網(wǎng)絡(luò), 例如打開(kāi)瀏覽器進(jìn)入任意網(wǎng)站時(shí), 才會(huì)顯示上面的幾條信息
  • 如果只有DNS沒(méi)有IP地址和子網(wǎng)掩碼, 一般是光貓沒(méi)有打開(kāi)ipv6的DHCP, 沒(méi)有分配IP
  • 還有一種測(cè)試ipv6 DHCP是否正常工作的方法: 關(guān)閉NAT64時(shí)可以上網(wǎng), 但打開(kāi)NAT64無(wú)法上網(wǎng)

轉(zhuǎn)載請(qǐng)注明:http://m.shnenglu.com/sunicdavy戰(zhàn)魂小筑

Unity3D的Socket適配

WWW類(lèi)本身已經(jīng)支持了IPV6, 無(wú)需處理, 這里講解使用C#原生Socket的處理

  • 測(cè)試用的設(shè)備的iOS版本必須是9.3以上的
  • Socket構(gòu)造時(shí), AddressFamily 設(shè)置為InterNetworkV6時(shí)只支持ipv6網(wǎng)絡(luò), 傳入InterNetwork時(shí)只支持ipv4網(wǎng)絡(luò)
  • 4.7.2和5.4.3的當(dāng)前版本在mono層并未支持ipv6代碼適配的核心函數(shù)getaddrinfo, 因此需要通過(guò)oc層做轉(zhuǎn)換, 以下是代碼
    這段代碼將getaddrinfo的地址轉(zhuǎn)換成一個(gè)完整字符串, 格式是:
    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/
會(huì)造成內(nèi)存泄露, 如果有更好的方法歡迎反饋

轉(zhuǎn)載請(qǐng)注明:http://m.shnenglu.com/sunicdavy戰(zhàn)魂小筑

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:  }
轉(zhuǎn)載請(qǐng)注明:http://m.shnenglu.com/sunicdavy戰(zhàn)魂小筑

iosaddrinfo.h

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

   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:  }
轉(zhuǎn)載請(qǐng)注明:http://m.shnenglu.com/sunicdavy戰(zhàn)魂小筑

參考鏈接

官方文檔
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/
注意, 此方案中的方法可用, 但是地址并不能解決南北互通的問(wèn)題

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品高清一区二区三区| 一级日韩一区在线观看| 亚洲欧美在线另类| 中文亚洲免费| 亚洲一区二区三区视频| 午夜视频一区在线观看| 久久精品成人欧美大片古装| 欧美亚洲视频在线观看| 欧美一区二区三区在线视频| 欧美一区二区三区在线| 久久久久欧美精品| 欧美成人国产| 欧美午夜宅男影院| 国产日韩欧美日韩大片| 亚洲电影免费观看高清完整版| 亚洲经典三级| 中文国产成人精品| 久久xxxx精品视频| 欧美成人精品| 亚洲视频精选| 久久免费视频在线| 欧美性片在线观看| 精品96久久久久久中文字幕无| 最新日韩在线| 欧美制服丝袜第一页| 欧美黄色一级视频| 亚洲一区二区欧美| 欧美搞黄网站| 国产午夜亚洲精品理论片色戒| 在线日本成人| 性欧美1819sex性高清| 女同一区二区| 亚洲综合欧美| 欧美成年人网站| 国产一区二区三区在线观看免费| 亚洲精品一区二| 久久精品天堂| 亚洲视频在线观看一区| 蜜桃av久久久亚洲精品| 国产亚洲成年网址在线观看| 亚洲精品国久久99热| 久久精品人人| 亚洲一区精品视频| 欧美人与性动交α欧美精品济南到| 国产视频丨精品|在线观看| 亚洲素人一区二区| 最近中文字幕日韩精品| 先锋资源久久| 国产精品久久久久毛片大屁完整版 | 亚洲一区在线播放| 美女视频黄 久久| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲天堂成人在线观看| 亚洲日本成人在线观看| 久久精品日韩一区二区三区| 国产精品美女主播| 亚洲制服少妇| 99精品国产一区二区青青牛奶| 美女黄网久久| 亚洲第一精品福利| 欧美jjzz| 久久综合网络一区二区| 亚洲激情精品| 欧美成人精品| 欧美91大片| 亚洲乱码视频| 日韩一二三在线视频播| 欧美日韩一区二区三| 亚洲美洲欧洲综合国产一区| 亚洲高清免费在线| 欧美精品二区| 亚洲一级黄色片| 亚洲综合视频在线| 国产一区二区三区电影在线观看| 欧美一区激情视频在线观看| 亚洲欧美综合网| 国内自拍视频一区二区三区| 噜噜噜噜噜久久久久久91 | 99成人在线| 国产精品美女一区二区| 欧美在线观看一区二区| 欧美中文日韩| 亚洲黄页一区| 亚洲一区免费| 在线日韩日本国产亚洲| 亚洲免费福利视频| 国产性猛交xxxx免费看久久| 免费久久99精品国产自| 欧美久久电影| 久久久久久黄| 欧美激情在线观看| 香蕉乱码成人久久天堂爱免费 | 午夜精品福利一区二区蜜股av| 国产精品亚洲一区| 欧美国产在线电影| 国产精品久久久免费| 久久久精品免费视频| 欧美国产日韩二区| 久久夜色精品国产噜噜av| 玖玖玖免费嫩草在线影院一区| 亚洲精品资源美女情侣酒店| 一本综合精品| 亚洲第一在线视频| 亚洲视频一区| 亚洲高清免费在线| 亚洲影视中文字幕| 亚洲精品无人区| 久久精品国产精品亚洲精品| 日韩午夜在线电影| 久久精品一区| 性视频1819p久久| 欧美激情aⅴ一区二区三区| 久久福利资源站| 欧美三日本三级少妇三2023| 模特精品裸拍一区| 国产农村妇女精品| 9人人澡人人爽人人精品| 在线电影院国产精品| 亚洲一区二区视频| 一区二区三区四区五区在线| 久久精品中文字幕一区| 亚洲欧美一区二区激情| 欧美精品久久久久a| 亚洲精品一级| 久久一区激情| 亚洲男人影院| 欧美国产视频在线| 美女精品视频一区| 国产小视频国产精品| 在线亚洲精品| 一区二区三区免费观看| 欧美成人tv| 亚洲国产经典视频| 亚洲精品免费在线播放| 久久香蕉精品| 老鸭窝亚洲一区二区三区| 国产伦精品一区二区三| 中国av一区| 午夜精品福利在线观看| 欧美日韩国产色站一区二区三区| 欧美激情一二三区| 亚洲精品乱码久久久久久按摩观| 久久夜色精品| 亚洲国产高清aⅴ视频| 亚洲免费激情| 欧美国产日韩一区二区| 亚洲精品一区二区三区不| 一区二区三区精品视频| 欧美性猛片xxxx免费看久爱| 亚洲免费小视频| 久久国产精品99精品国产| 国产区日韩欧美| 久久久久久69| 欧美刺激性大交免费视频| 亚洲福利视频三区| 欧美高清在线视频| 亚洲视频视频在线| 久久久久www| 在线看视频不卡| 欧美国内亚洲| 亚洲一区二区三区在线观看视频| 久久精品国产2020观看福利| 影音先锋日韩资源| 欧美日韩精品一区| 每日更新成人在线视频| 米奇777在线欧美播放| 久久在线免费| 亚洲欧洲视频在线| 欧美女人交a| 亚洲欧美成人网| 亚洲第一综合天堂另类专| 正在播放欧美一区| 国产日韩欧美另类| 欧美精品一区二区精品网| 亚洲一区二区视频在线| 欧美电影在线观看| 午夜激情综合网| 亚洲欧洲一区二区在线观看| 欧美午夜女人视频在线| 久久国产精品72免费观看| 亚洲三级观看| 久久久精品国产免大香伊| 日韩午夜剧场| 黑丝一区二区| 国产精品美女一区二区| 欧美成人午夜免费视在线看片| 夜夜精品视频| 欧美国产精品劲爆| 欧美亚洲综合网| 亚洲三级观看| 国内自拍视频一区二区三区| 欧美日韩免费一区二区三区| 久久综合久久美利坚合众国| 国产情人节一区| 亚洲国产婷婷香蕉久久久久久99 | 久久国产精品99久久久久久老狼| 在线日韩电影| 精品51国产黑色丝袜高跟鞋| 欧美性做爰猛烈叫床潮| 欧美成人官网二区|