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. The Better Way to Debug Your JavaScript Program

    Debugging JS program is not as easy as we do in Visual Studio or any other IDE. I usually us "a ...

  2. Java基础--Java内存管理与垃圾回收

      Java自动内存管理 在讲解内存管理之前,首先需要了解对象和对象引用的区别 对象是类的一个实例,以人这个类为例,Person是我们定义的一个类 public class Person{} publ ...

  3. Windows phone 之Socket

    服务器端: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...

  4. php 用于检测是PC还是手机访问

    <?php$ua = strtolower($_SERVER['HTTP_USER_AGENT']);$uachar = "/(iphone|android|phone|mobile| ...

  5. WPF学习(一)控件的公共属性

    Visiblity控件是否可见:枚举类型:Visible表示可见.Collapsed不可见. IsEnabled:控件是否可用:bool类型. Background:背景色. FontSize:字体大 ...

  6. 一个简单的Hibernate工具类HibernateUtil

    HibernateUtil package com.wj.app.util; import org.hibernate.Session; import org.hibernate.SessionFac ...

  7. 桂电在线-转变成bootstrap版2(记录学习bootstrap)

    下载bootstrap框架https://github.com/twbs/bootstrap 或者 http://getbootstrap.com/ 拷贝模板 修改基本模板 语言zh-cn,标题,描述 ...

  8. yii2源码学习笔记(十五)

    这几天有点忙今天好些了,继续上次的module来吧 /** * Returns the directory that contains the controller classes according ...

  9. Hybrid App开发者一定不要错过的框架和工具

    最近开始给网站的移动版本做技术选型,发现了很多好玩的东西,写出来给大家分享下. ionicFramework 我是hybrid app的忠实粉丝和大力倡导者,从 新浪移动云开始就不断的寻找能帮助Web ...

  10. C语言的编译过程和GCC编译参数

    C语言的编译一般有三个步骤: 预编译: gcc -E -o a.e a.c 预编译a.c文件,生成的目标文件名为a.e 预编译就是将include包含的头文件内容替换到C文件中,同时删除代码中没用的注 ...