Android模拟器的ip获取以及模拟器之间socket通信           http://kalogen.iteye.com/blog/1565507

作者:李波

实现网络五子棋时用到了两个设备间的Socket通信,如果使用真机调试比较麻烦,用两个模拟器之间进行通信会比较方便。

首先要获得的模拟器的IP地址

在本机上启动两个模拟器,emulator-5554,emulator-5556查看模拟器ip

在命令行窗口输入命令

adb –s emulator-5554 shell

getprop

找到一下两行:

[net.eth0.dns1]: [10.0.2.3]

[net.gprs.local-ip]: [10.0.2.15]

可以发现两个模拟器的IP地址完全一样,都为10.0.2.15,DNS都为10.0.2.3,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的。

模拟器提供了一个特殊的IP,这个IP地址为10.0.2.2,这个IP地址可以说等同于PC本机的IP地址127.0.0.1,所以,通过这个特殊的IP地址可以进行PC与模拟器之间的通信。

考虑模拟器作为主机的情况:

需要把模拟器的端口映射到PC的端口,通过连接PC端的端口来把请求重定向发送给,模拟器。

1)PC作为客户端,模拟器1为主机

2)模拟器2为客户端,模拟器1为主机

映射PC端口到模拟器端口的命令如下:

>adb –semulator-5554 forward tcp:6665 tcp:6666

映射成功后,连接模拟器的端口6666就要通过连接PC的端口6665进行连接,客户端连接的IP必须为环路IP,不能使用本机IP,如 192.168.1.102,因为本机IP跟环路IP没有映射关系,所以发送到本机IP(192.168.1.102)的连接请求无法映射到 127.0.0.1的环路IP上,使用PC端程序作为客户端时,环路IP必须使用127.0.0.1,使用模拟器作为客户端时,环路IP使用 10.0.2.2,虽然两者是同一个环路IP,但是PC只能识别127.0.0.1,模拟器只能识别10.0.2.2。

3)如果要实现两个模拟器之间的相互通信,就必须每个模拟器都既为Server又为Client,并在PC机上映射为不同的端口。结构图如下

由于PC的本机IP(192.168.1.102)没有映射到环路IP,所以不能在Android真机与模拟器之间或者运行在两台PC的模拟器之间进行Socket通信,如果要实现连接,必须在作为服务器的PC上,运行一个用于数据中继的后台程序,进行数据的转发。

Android模拟器(simulator)把它自己作为了localhost,也就是说,代码中使用localhost或者127.0.0.1来访问,都是访问模拟器自己!这是不行的!
        如果你想在模拟器simulator上面访问你的电脑,那么就使用android内置的IP 10.0.2.2 吧,10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名alias
        记住,在模拟器上用10.0.2.2访问你的电脑本机。

详细请参考Android文档android-sdk-windows\docs\guide\developing\devices\emulator.html下的Emulator Networking
         
Network Address Description
10.0.2.1 Router/gateway address
10.0.2.2 Special alias to your host loopback interface (i.e., 127.0.0.1 on your development machine)
10.0.2.3 First DNS server
10.0.2.4 / 10.0.2.5 / 10.0.2.6 Optional second, third and fourth DNS server (if any)
10.0.2.15 The emulated device's own network/ethernet interface
127.0.0.1 The emulated device's own loopback interface

Android模拟器的ip获取以及模拟器之间socket通信的更多相关文章

  1. java和C#之间SOCKET通信的问题

    转自:http://www.cdtarena.com/javapx/201307/9170.html java和C#之间SOCKET通信的问题 一.服务器端(使用java编写) /** * 监听客户端 ...

  2. Android - Fragment (三)不同Fragment之间的通信

    在Fragment的java文件中,可以使用getActivity()来获得调用它的activity, 然后再找到另一个Fragment,进行通信 getActivity().getFragmentM ...

  3. 10月9日Android学习笔记:活动与服务之间的通信

    最近在照着<第一行代码>这本书来学安卓,顺便记下笔记.主要的内容是Android中服务的第二种启动方式,通过活动绑定服务来启动服务,实现活动与服务之间的通信. 一. 首先创建一个服务类 p ...

  4. Android中Activity、Service和线程之间的通信

    Activity.Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者 ...

  5. Android应用开发基础篇(12)-----Socket通信

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378669.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌 ...

  6. Android应用开发基础篇(12)-----Socket通信(转载)

    转自:http://www.devdiv.com/android_socket_-blog-258060-10594.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络 ...

  7. Android——4.2 - 3G移植之路之 AT 通信 (四)

    在前文Android--4.2 - 3G移植之路之 reference-ril .pppd 拨号上网 (三)中分析了3G连接网络的流程,当中有说道通过AT指令建立连接, 在这里记录一下3G中的AT通信 ...

  8. 获取android模拟器的IP地址

    http://blog.csdn.net/yjkwf/article/details/7244632 1.输入adb devices查看加载的设备 2.使用 adb -s [设备] [命令]执行命令 ...

  9. 如何在Android应用程序中使用传感器模拟器SensorSimulator

    原文地址; 如何在Android应用程序中使用传感器模拟器 - 移动平台应用软件开发技术 - 博客频道 - CSDN.NET http://blog.csdn.net/pku_android/arti ...

随机推荐

  1. 非常的奇葩,终于解决了硬盘从盘盘符消失的问题 http://bbs.gamersky.com/thread-1712710-1-1.html (出处: 游民星空论坛)

    本人用电脑也十多年了,硬盘的问题也碰到过不少.但最近却碰到了一个很奇葩的问题.就是安装了一块全新的SSD硬盘当从盘,但在装上之后,在我的电脑中却不显示,没有盘符.不过打开系统磁盘管理却能显示硬盘信息. ...

  2. java Junit 测试中异常处理

    错误提示: junit.framework.AssertionFailedError: No tests found in错误解决办法 用junit Test运行后,出现如下的错误:junit.fra ...

  3. 解决IE无法解析json的方法

    一.原始方法eval() 二.json插件--github开源插件:json-js/json2.js https://github.com/douglascrockford/JSON-js/blob/ ...

  4. ios专题 -动画

    知识点 : 1)ios 核心动画的基础是图层.图层的基础是CALayer,它是所有核心图层类的父类. 2)CATransaction是核心动画类负责协调多个动画原子显示更新.事务支持嵌套使用. 3)图 ...

  5. ES 中文分词

    一.大名鼎鼎的中文插件IK的安装配置 1. 在插件目录中建立IK的目录 mkdir $ES_HOME/plugins/analysis-ik 2. 下载IK 的类库jar 文件到IK目录 cd $ES ...

  6. [Neural Networks] Dropout阅读笔记

    多伦多大学Hinton组 http://www.cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf 一.目的 降低overfitting的风险 二.原理 ...

  7. 学渣也要搞 laravel(2)—— HTTP路由[1]篇

    前几天忙了,然后快两个星期没有发博客.今天正式回归.哈哈 1. 路由 说到路由当时学的时候给我疑惑了几天..没有仔细看文档.然后一脸蒙蔽的去用 postman[谷歌插件] 测试路由方法.然后就很奇怪 ...

  8. Activity singleInstance启动模式

    全局单例模式 如果 是新建Activity, 则新建一个Task, 然后将ActivityRecord单独放在其中 如果已经存在这个Activity, 则直接将这个Activity转到前台

  9. Python 3中套接字编程中遇到TypeError: 'str' does not support the buffer interface的解决办法

    转自:http://blog.csdn.net/chuanchuan608/article/details/17915959 目前正在学习python,使用的工具为python3.2.3.发现3x版本 ...

  10. Find your present (2) (位异或)

    Problem Description In the new year party, everybody will get a "special present".Now it's ...