IOS上架之socket IPV6兼容問題

前言

6.1AppStore發(fā)布之后的應用要兼容ipv6。
原因是美國ipv4的地址不足。
其實在國內(nèi)完全是相反的地位观蓄,連ipv6的服務器都不多址愿,遍地是ipv4的地址该镣。但是為了應付appstore的策略,勢必是需要讓app兼容的响谓。
我使用的是游戲引擎(cocos unity都用)所開發(fā)的項目损合,所以跨平臺,但是android沒有上架需求娘纷。所以是直接拿一套oc代碼去做的IPV6兼容嫁审。

原理

我想很多人也會像我之前一樣,不太了解什么是Ipv4和Ipv6失驶,其實這只是個本地端口地址土居。
哪里會用到這些地方呢? 應用有網(wǎng)絡通信的地方,當然Http肯定不算擦耀,因為他只有post 和get方法棉圈,不需要用 Connect方法去和服務器做實時通信。所以一旦服務器有socket連接的時候眷蜓,兼容Ipv6就勢在必行了分瘾。

socket連接

既然提到了socket我覺得還是要提一下,不管是什么開發(fā)語言都會有這個連接庫的底層封裝的吁系。舉個例子:oc,c++,c#德召。或者是在網(wǎng)上隨便一搜就是大把的socket i/o封裝汽纤,歸根結(jié)底上岗,其實底層真正真正調(diào)用的方法無非就是幾個,第一個 sockaddr_in蕴坪,這是一個結(jié)構(gòu)體肴掷,賦值這個結(jié)構(gòu)體的sin_family ,sin_port ,sin_addr.s_addr三個值就夠了。第二個是SOCKET 這個類對象賦值背传。
為什么你的應用不兼容Ipv6呆瞻,就是socket里面的connect方法下沒做Ipv6判斷以及沒用ipv6自身的api。

需要改.m 為.mm 加入#include<netdb.h> 頭文件

如何判斷當前網(wǎng)絡是否是ipv6

   +(NSString *) getIPWithHostName:(const NSString *)hostName
    {
    struct addrinfo * result;
     struct addrinfo * res;
    char ipv4[128];
    char ipv6[128];
    int error;
    BOOL IS_IPV6 = FALSE;
    bzero(&ipv4, sizeof(ipv4));
    bzero(&ipv4, sizeof(ipv6));

    error = getaddrinfo([hostName UTF8String], NULL, NULL, &result);
    if(error != 0) {
    NSLog(@"error in getaddrinfo:%d", error);
    return nil;
    }
     for(res = result; res!=NULL; res = res->ai_next) {
    char hostname[1025] = "";
    error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, 1025, NULL, 0, 0);
    if(error != 0) {
        NSLog(@"error in getnameifno: %s", gai_strerror(error));
        continue;
    }
    else {
        switch (res->ai_addr->sa_family) {
            case AF_INET:
                memcpy(ipv4, hostname, 128);
                break;
            case AF_INET6:
                memcpy(ipv6, hostname, 128);
                IS_IPV6 = TRUE;
            default:
                break;
        }
        NSLog(@"hostname: %s ", hostname);
    }
    }
    freeaddrinfo(result);
    if(IS_IPV6 == TRUE) return [NSString stringWithUTF8String:ipv6];
    return [NSString stringWithUTF8String:ipv4];
    }

這個函數(shù)既有了是否是ipv6的判斷径玖,也有了域名解析痴脾。
至于域名解析的意思是,你需要把socket連接的ip地址改成域名梳星。

至于unity或者是cocos里面使用這代碼赞赖,下個篇章我會詳細講oc與,c#,c++混編的內(nèi)容丰泊,當然僅僅使用的話薯定,我詳細可以百度得到,不是一個非常困難的技術瞳购。

測試

  • 你需要一個和mac連接的網(wǎng)線轉(zhuǎn)接器话侄,和根有網(wǎng)絡的網(wǎng)線
  • 百度mac如何開啟ipv6的網(wǎng)絡
  • 注意:在點擊共享的時候,是需要按住option鍵的
  • 真機測試:連上mac發(fā)出的wifi学赛,測試網(wǎng)絡是否通

注意事項

ipv6的兼容僅和客戶端有關系年堆。
和服務端沒半毛錢關系。請不要像我一樣遇到這樣的問題就甩鍋給服務端了盏浇。
深深的對不起我服務端大兄弟变丧。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绢掰,隨后出現(xiàn)的幾起案子痒蓬,更是在濱河造成了極大的恐慌童擎,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攻晒,死亡現(xiàn)場離奇詭異顾复,居然都是意外死亡,警方通過查閱死者的電腦和手機鲁捏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門芯砸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人给梅,你說我怎么就攤上這事假丧。” “怎么了动羽?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵包帚,是天一觀的道長。 經(jīng)常有香客問我曹质,道長婴噩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任羽德,我火速辦了婚禮,結(jié)果婚禮上迅办,老公的妹妹穿的比我還像新娘宅静。我一直安慰自己,他們只是感情好站欺,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布姨夹。 她就那樣靜靜地躺著,像睡著了一般矾策。 火紅的嫁衣襯著肌膚如雪磷账。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天贾虽,我揣著相機與錄音逃糟,去河邊找鬼。 笑死蓬豁,一個胖子當著我的面吹牛绰咽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播地粪,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼取募,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蟆技?” 一聲冷哼從身側(cè)響起玩敏,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤斗忌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旺聚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飞蹂,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年翻屈,在試婚紗的時候發(fā)現(xiàn)自己被綠了陈哑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡伸眶,死狀恐怖惊窖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情厘贼,我是刑警寧澤界酒,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站嘴秸,受9級特大地震影響毁欣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岳掐,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一凭疮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧串述,春花似錦执解、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至觅赊,卻和暖如春右蕊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吮螺。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工饶囚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人规脸。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓坯约,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莫鸭。 傳聞我的和親對象是個殘疾皇子闹丐,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容