ipv6 解決方案 詳細版
蘋果官方出了新的規定,要求新上架的app都必須單獨支援ipv6-only的網路。
具體的要求連結:https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW13
熱心的網友來了箇中文版本的:
http://kepenj.me/2016/05/22/Supporting-IPv6/
1:a庫那裡有個問題稍微測試下,舊版本的cocos2dx只有libhcurl.a,而新版本的是有libcurl.a, libssl.a, libcrypto.a,三個都要加進去,而且還要加到專案的引用。
注意liburl.a的路徑
tcpsocket changed:
static bool isIPV6Net(conststd::string domainStr ="www.baidu.com")
{
bool isIPV6Net =false;
structaddrinfo *result =nullptr,*curr;
structsockaddr_in6 dest;
bzero(&dest,sizeof(dest));
dest.sin6_family =AF_INET6;
int ret =getaddrinfo(domainStr.c_str(),nullptr,nullptr,&result);
if (ret ==0)
{
for (curr = result; curr !=nullptr; curr = curr->ai_next)
{
switch (curr->ai_family)
{
caseAF_INET6:
{
isIPV6Net = true;
break;
}
caseAF_INET:
break;
default:
break;
}
}
}
freeaddrinfo(result);
return isIPV6Net;
}
staticstd::string domainToIP(constchar* pDomain)
{
if (isIPV6Net())
{
structaddrinfo hint;
memset(&hint,0x0,sizeof(hint));
hint.ai_family =AF_INET6;
hint.ai_flags =AI_V4MAPPED;
addrinfo* answer =nullptr;
getaddrinfo(pDomain,nullptr, &hint, &answer);
if (answer !=nullptr)
{
char hostname[1025] ="";
getnameinfo(answer->ai_addr,answer->ai_addrlen,hostname,1025,nullptr,0,0);
char ipv6[128] ="";
memcpy(ipv6,hostname,128);
CCLOG("domainToIP addrStr:%s", ipv6);
return ipv6;
}
freeaddrinfo(answer);
}
else
{
structhostent* h =gethostbyname(pDomain);
if( h !=NULL )
{
unsignedchar* p = (unsignedchar *)(h->h_addr_list)[0];
if( p !=NULL )
{
char ip[16] = {0};
sprintf(ip,"%u.%u.%u.%u", p[0], p[1], p[2], p[3]);
return ip;
}
}
}
return"";
}
#if ((CC_TARGET_PLATFORM ==CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM ==CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM ==CC_PLATFORM_MAC))
m_isIpv6=isIPV6Net();
if (m_isIpv6) {
CCLOG("[socket] IPV6");
m_socket = ::socket(AF_INET6,SOCK_STREAM,IPPROTO_TCP);
}else{
CCLOG("[socket] IPV4");
m_socket = ::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
}
#else
m_socket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
#endif
參考:http://blog.csdn.net/u011809009/article/details/51766714
要注意的坑:
開發的時候發現一切換ipv6wifi socket怎麼都連不上
後來發現是伺服器管理員把埠給牆了
另外 服務端可以租個國外的ipv6伺服器
如果發現連不上 請先用telnet 域名/ip 埠 測試一下
相關文章
- Java記憶體溢位的詳細解決方案Java記憶體溢位
- 超詳細圖文介紹,華為桌面雲解決方案
- WordPress網站訪問慢解決方案(超詳細圖文教程)網站
- Leetcode 344:驗證迴文串(最詳細解決方案!!!)LeetCode
- 一次RAC例項驅逐詳細分析及解決方案
- 高併發解決方案詳解(9大常見解決方案)
- 前端響應式佈局原理與方案(詳細版)前端
- 構建運營級IPv6網路解決方案概述
- 詳解Nginx 13: Permission denied 解決方案Nginx
- 快取穿透詳解及解決方案快取穿透
- HTTP Status 404 的詳細解決思路HTTP
- Glide+OkHttp訪問IPv6出錯的解決方案IDEHTTP
- 詳解摩杜雲“雲遊戲解決方案”遊戲
- [詳解] VMware vCloud雲解決方案有些啥?Cloud
- SSH 連線慢的解決方案詳解
- 史上最詳細域名連結被微信封殺攔截圖蔽解決方案
- 最詳細版圖解優先佇列(堆)圖解佇列
- MySQL5.7.21解壓版安裝詳細教程MySql
- CSS 佈局解決方案(終結版)CSS
- IPv6基礎知識詳解
- 電腦提示0x000000a5藍色畫面完美解決方案詳細圖解步驟圖解
- 高校資料安全解決方案-網站版網站
- 定時任務報警通知解決方案詳解
- Leetcode 167:兩數之和 II - 輸入有序陣列(最詳細解決方案!!!)LeetCode陣列
- 機器學習之決策樹詳細講解及程式碼講解機器學習
- 淘寶sku詳細資訊介面接入方案
- 一個Tomcat 如何部署多個專案?附多種解決方案及詳細步驟!Tomcat
- 有關專案依賴包發生 Manifest Merge 衝突的詳細解決方案
- SecurecRT亂碼怎麼辦?詳細解決方法分享~Securecrt
- 詳細講述 Oracle 密碼丟失解決方法Oracle密碼
- 票總管代賬版行業解決方案行業
- 無線覆蓋解決方案需要考慮哪些細節
- Java註解最全詳解(超級詳細)Java
- nginx 詳解 – 詳細配置說明Nginx
- nginx 詳解 - 詳細配置說明Nginx
- 案例分享:基於道路智慧路燈改造的智慧城管專案系統解決方案詳細解析
- 解決方案| anyRTC金融音視訊解決方案
- 網路爬蟲詳細設計方案爬蟲