`

如何让Android模拟器能访问到本地Server或Web应用(即:运行模拟器的PC)

阅读更多

I、让人烦躁的问题

近日,在移植Mina框架到Android上时,将已经做好的Demo客户端直接移植到Android工程后,启动原来的服务端,再启动Android客户端,总是提示无法建立连接(TCP 长连接),

debug跟踪后,发现建立连接后,获取的Session总是为null,log提示“failed to get session”

且在本地PC上抓包筛选127.0.0.1的消息,一个也没有,也就是说,连基本的TCP建立连接前的握手消息包都没有:

 

// 创建连接
ConnectFuture future = connector.connect(new InetSocketAddress(127.0.0.1, PORT));
// 等待连接创建完成
future.awaitUninterruptibly();
// 获得session,此处的session总是为null
session = future.getSession();

 

 

但,相同的代码,在java客户端就没有问题,在移植到Android程序时,也在menifest中添加了相应的网络权限了,到底是怎么回事儿呢?一顿纠结 TT

 

II、真相

通过google 百度之后,发现原因出在Host地址上:127.0.0.1 !!!

 

话说,在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服务或Server,而localhost、127.0.0.1就是指运行程序的本地PC,即本机。

 

而对于Android模拟器来说,这两个地址的代表意义是什么呢?

让我们一起回想下,Android系统的本质:

Android本身就是一个OS,一个架设在Linux上的OS,那么在对于一个OS来说,localhost、127.0.0.1又代表的是什么?

 

对,是它自己。

 

所以,上面的代码在Android模拟器上运行后,它试图与自己(即:127.0.0.1,Android模拟器,而不是运行Server的本地PC)建立连接,显然,咱们的Server端压根就没放在模拟器上,而是运行模拟器的PC机上,所以建立连接失败,是显而易见的事情。

 

所以,这也解释了,为啥在PC端抓包连基本的握手都没有了,因为压根就没跟本地PC连,握手数据模拟器都发给它自己了。

 

III、干掉它的方法

既然知道原因了,那么,怎么让Android模拟器访问到PC上的Server端,有两种方法:

  • Host地址换成本地PC的IP地址(比如我的是:172.17.182.245)-----这是最直接的办法
  • 还有一种方法,这个比较取巧,我也是google baidu后,才学习的:在Android中,将我们本地PC的地址映射为10.0.2.2,因此,只需要将原先的 localhost或者127.0.0.1换成10.0.2.2,就可以在模拟器上访问本地计算机上的运行的Server或Web资源了。

个人推荐第一种方法,因为,这样将来放到真机张跑,代码就不用改了~呵呵,我比较懒~

 

IV、下次不幸再遇到时的排解方法

  • 首先,检查是否在menifest里面赋予应用程序访问网络的权限了?
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  • 其次,检查连接的IP地址,端口是否与Server启用的相同
  • 最后,检查代码是逻辑否有问题

V、参考资料

感谢各位的同行的泣血提携:

http://www.cnblogs.com/YOUCAN/archive/2012/09/14/2684691.html

http://blog.csdn.net/junjieking/article/details/6612557

 

希望下次再遇到类似问题,能做到秒杀大笑

 

 

 

 

分享到:
评论
1 楼 绿茵好莱坞 2017-09-21  
好文 ,值得学习

相关推荐

    Android 模拟器如何访问本地网页和获取浏览器

    Android 模拟器如何访问本地网页和获取浏览器

    android x86模拟器和PC相互通信(socket)

    实现方法:android socket ① 服务程序运行在PC端 ② 客户端程序运行在android模拟器 实现形式:由android 模拟器向服务程序发出消息,然后服务程序会送消息至模拟器。 注意要点: 一、 服务程序在PC端,需要指定...

    Android 模拟器永久root工具

    Android 模拟器永久root工具------包含 (android for img.rar、Android SU文件更新包.zip、RootExplorer.apkSuperuser.apk) ...注:android-8对应的是android 2.2,大家也可以利用相同方式root其它模拟器

    Android模拟器,电脑运行Android、APK文件

    现在流行安卓系统,鉴于囊中羞涩,买不起手机和平板电脑,所以我就在网上找了个安卓模拟器,整理了一下,分享给大家,...安装apk程序到手机或模拟器的工具:APK安装器 光盘映像文件制作/编辑/转换工具:UltraISO软碟通

    模拟器躲避的检测与应对(Android模拟器)

    Android模拟器躲避的检测与应对,介绍模拟器检测的主要方法

    android模拟器java Android

    android模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Androidandroid模拟器java Android...

    PC安装Android模拟器完全指南教程.doc

    PC安装Android模拟器完全指南教程

    Android模拟器入门

    Android模拟器入门Android模拟器入门Android模拟器入门Android模拟器入门Android模拟器入门Android模拟器入门Android模拟器入门

    Android 模拟器建立端口映射

    Android 模拟器建立端口映射讲解 redir Android 模拟器建立端口映射

    Android模拟器Ip设置详细操作

    做Android开发,模拟器是必备品,而Android模拟器的IP和电脑总不是一个网段的,想要进行测试非常麻烦,甚至很多时候模拟器没有办法连接互联网,本文详细的描述了Android模拟器IP设置的完整步骤。

    关于Android Studio中使用OkHttpClient访问网络需要第三方模拟器的问题

    在黑马程序员教材《Android移动应用开发基础案例教程》中,有一个仿美团项目案例,需要使用OkHttpClient访问网络,教材中说需要使用第三方模拟器,否则访问不到数据。实际上,在清单文件AndroidManifest.xml进行一定...

    Android 逆向 - Android 模拟器 3.73.7z

    【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system ) ...Android 模拟器

    安装APK文件到Android模拟器

    安装APK文件到Android模拟器

    如何修改Android模拟器的IMSI

    如何修改Android模拟器的IMSI,简单方法。

    Android全面检测设备是否模拟器

    这多亏了国内pc端模拟器的发展,现在市面上的模拟器越来越多,也越来越“逼真”了,模拟器和真机的区别在逐步缩小,这就使得模拟器的检测存在偏差,不管有多小,偏差总是会存在的,如何降低这种偏差值,就是这篇文章...

    Android在线模拟器-1.7.1.zip

    名称:Android在线模拟器 ---------------------------------------- 版本:1.7.1 作者:https://www.apkonline.net/ 分类:社交通讯 ---------------------------------------- 概述:这是一个Android在线模拟器,...

    Androidstudio模拟器系统签名(.jks)

    用于Androidstudio模拟器的系统签名,方便进行需要系统签名方面的调试,内含一个生成的platform.jks和系统签名源文件(.pk8和x509.pem等等) ,拿到源文件你也可以自己生成jks或者keystore。 内含jks签名信息: Key ...

    http server端模拟器

    http server端模拟器

    Android模拟器小技巧

    压缩文件包含:Android模拟器快捷键大全.pdf、 Android模拟器也玩ping.pdf、 gsm call命令向Android模拟器打电话.pdf、 sms send命令向Android模拟器发短信.pdf、 让你的Android模拟器支持Cupcake屏幕键盘.pdf

    WindowsAndroid模拟器

    BlueStacks是一款在PC上面运行,安装简单,功能强大的安卓软件模拟器, 他和Android SDK自带的Aandroid模拟器相比,有两个优势:大而快。而且BlueStacks App Player的功能不只运行个Android应用这么简单, ...

Global site tag (gtag.js) - Google Analytics