unity增加对IPv6的支持

本文转自:http://blog.csdn.net/huutu/article/details/52155885

  其实ipv4与ipv6之间的区别在建立socket时就有不同:

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

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

  然后我们在建立socket的时候要判断用户的当前网络类型是ipv4还是ipv6。

  这里要说到Unity 新增的对IPV6的支持。

  其中之一就是  Dns.GetHostAddress 。

  如下代码:

  IPAddress[] address=Dns.GetHostAddresses("test.thisisgame.com.cn");

  如果当前是 IPV6 的网络环境,这个函数会返回一个 IPV6 地址,如64:ff9b::7237:5342。

  如果当前是 IPV4 的网络环境,这个函数会返回一个 IPV4 地址,如 127.0.0.1。

  接下来判断 IPAddress 的 AddressFamily来确定当前的网络环境。

  address[0].AddressFamily==AddressFamily.InterNetworkV6

  这样就可以判断是IPV6 还是 IPV4了。  

   public static string CheckNetWorkVersion( string nHostString )

{

string nTargetIPString = "www.baidu.com";

IPAddress[] address=Dns.GetHostAddresses( nTargetIPString );

if ( address [0].AddressFamily == AddressFamily.InterNetworkV6 )

{

Debug.LogError ( "[ socket network ]------ipv6------" );

mIsInIp4 = false;

}else if(address [0].AddressFamily == AddressFamily.InterNetwork ){

Debug.LogError ( "[ socket network ]------ipv4------" );

}

string nOutHost = nHostString;

//如果是ipv6 网络

if (!mIsInIp4) {

System.Net.IPHostEntry host;

try {

host = System.Net.Dns.GetHostEntry ( nHostString );

foreach (System.Net.IPAddress ip in host.AddressList) {

if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) {

nOutHost = ip.ToString();

break;

}

}

} catch (Exception e) {

Debug.LogErrorFormat ("[ socket network ] error , GetIPAddress error: {0}", e.Message);

}

}

Debug.LogError ("[ socket network ] --- ip addr --- " + nOutHost );

mConnectSvrUrl = nOutHost;

return nOutHost;

}

   public void connect( ConnectVars nVars )

{

if (mNetCallback == null) {

return;

}

//            Debug.LogError ( "-----------connect-----------");

mLinkState = true;

mConnectInfo = nVars;

Debug.LogError ( "-----------mIsInIp4-----------" + mIsInIp4 + " /" + mConnectInfo.serverAddress);

if ( mIsInIp4 ) {

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

} else {

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

}

mReadBuffer = new byte[ 4096 ];

if ( null == mSocEntity )

return ;

mNetCallback.onRecvMessage ( FiEventType.CONNECT_START , null , 0  );

Debug.Log ("[ "+TAG+" ] server ip ="+mConnectSvrUrl+" server port="+mConnectInfo.serverProt);

IPEndPoint nEndPoint = new IPEndPoint (IPAddress.Parse ( mConnectSvrUrl ), mConnectInfo.serverProt);

mSocEntity.BeginConnect ( nEndPoint, new System.AsyncCallback( OnSocketConnected ) , mSocEntity );

}

时间: 2024-10-05 01:50:37

unity增加对IPv6的支持的相关文章

2014.7.26 为cocos2d-x3.2版本增加protobuffer2.5.0支持

为cocos2d-x3.2版本增加protobuffer2.5.0支持(win32&android) 因为不想排版 所以这里只有文字 可以下载word版观看:点击下载 作用:添加protobuffer支持后,可以利用protobuffer特性来序列化和反序列化二进制数据流. 软件准备:cocos2d-x3.2, protobuffer2.5.0,protoc-2.5.0-win32, vs2012, anroid相关环境(SDK, NDK , CYGWIN等) Setp1:新建cocos2d-x

HTTP实现长连接(TTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持Connection: keep-alive)

HTTP实现长连接 HTTP是无状态的 也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,如JavaScript文件.图像文件.CSS文件等:当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话 HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的.

php增加对mysqli的支持

php增加对mysqli的支持 我在fedora下使用yum安装的php和mysql,但是发现php不支持myslqi,只能编译一个mysqli的扩展给php用了. 方法如下: 1.下载php 2.进入扩展目录, cd /php-5.3.10/ext/mysqli 3.phpize 生成configure 4.如果在编译php对mysqli的支持的时候出现了如下错误: checking whether to enable embedded MySQLi support… nochecking f

json_encode增加options参数后支持中文

---------------------------------------------------------------------------------------------------- header('content-type:text/html;charset=utf-8'); $a = '中文'; echo json_encode($a);//5.3版本以前,无参数情况输出 "\u4e2d\u6587" echo json_encode($a, JSON_UNESC

安卓开启ipv6网络支持

安卓开启ipv6网络支持 (可在ipv6环境下访问ipv6网络, 如:ipv6.google.com, 或使用ipv6的代理访问ipv4网络) 注 需要root权限 只在 android4.1 环境测试成功 可能需要安装"ES 文件浏览器".打开Root工具箱,将文件系统挂载为"可读可写"(RW). 重启后失效, 需要再次运行脚本, 原因可能是开机的启动脚本有禁用ipv6.(可以尝试修改系统脚本-) 参考: –1– : –2– 安装 Android Terminal

iOS IPv6兼容支持和IPv6审核被拒收集整理

iOS IPv6兼容支持和IPv6审核被拒收集整理 最近遇到一个大坑:IPv6审核被拒问题,于是广寻解决方案,先把一些可以用资料文档收集起来备用.也希望同行能用得着. 官方文档说明:Supporting IPv6 DNS64/NAT64 Networks 官方关于支持IPv6的网络的开发指引文档 iOS-用手机网络测试Ipv6 用一台Mac,2个iPhone手机,1个数据线搭建本地IPv6测试网络环境 iOS应用支持IPV6,就那点事儿 参考官方文档的一些原理中文说明 专业处理AppStore审

MyEclipse6.5增加对Tomcat7的支持

MyEclipse6.5增加对Tomcat7的支持 最近在研究Servlet3.0,它是JavaEE6.0规范中的一部分 而Servlet3.0对服务器是有要求的,比如Tomcat7+(而Tomcat7.0要求JDK6+,即编译级别应该是6+) 但我一直使用的MyEclipse6.5不支持Tomcat7,可也不能为了这个就去装一个MyEclipse8.0啊 好吧,还是像当初我用TongWeb5.0的方式一样,自己DIY一下吧 1)下载Tomcat7 2)由于我已经配置了tomcat6,为了同时拥

在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务端接口的耦合度.很多当今流行的RESTful API开发框架,包括Spring REST,也都默认支持HAL规范,当RESTful API被调用后,服务端就会返回ContentType为application/hal+json的JSON内容,例如: { "_links": { "

VC++ IPv6的支持

最近根据项目需要,要在产品中添加对IpV6的支持,因此研究了一下IPV6的相关内容,Ipv6 与原来最直观的改变就是地址结构的改变,IP地址由原来的32位扩展为128,这样原来的地址结构肯定就不够用了,根据微软的官方文档,只需要对原来的代码做稍许改变就可以适应ipv6. 修改地址结构 Windows Socket2 针对Ipv6的官方描述 根据微软官方的说法,要做到支持Ipv6首先要做的就是将原来的SOCKADDR_IN等地址结构替换为SOCKADDR_STORAGE 该结构的定义如下: typ