文档章节

Android模拟器的ip获取以及模拟器之间socket通信

陈爱茹cx1992
 陈爱茹cx1992
发布于 2016/07/26 17:34
字数 648
阅读 4
收藏 0

作者:李波

实现网络五子棋时用到了两个设备间的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上,运行一个用于数据中继的后台程序,进行数据的转发。

本文转载自:http://blog.csdn.net/ruru7989/article/details/22266603

共有 人打赏支持
陈爱茹cx1992
粉丝 0
博文 59
码字总数 0
作品 0
济南
程序员
PC电脑和Android模拟器访问及模拟器之间tcp/udp通信

Android系统默认只能通过IP(10.0.2.2)单向访问PC电脑,而PC电脑不能通过IP来直接访问Android模拟器系统。要想实现PC电脑和Android模拟器系统以及Android模拟器之间相互通信必须借助端口重定...

小克898
2013/09/06
0
0
Android模拟器的ip获取以及模拟器之间socket通信

1、Android 获取本机Mac 地址方法: 需要在AndroidManifest.xml文件中添加权限: <uses-permission android:name="android.permission.ACCESSWIFISTATE" /> Java代码 public String getLocal......

xiahuawuyu
2012/10/07
0
0
android socket各种通信

我已经试验成功: ps:模拟器做服务器,PC机做客户端。如果通过wifi连接的话直接访问IP就行,不用重定向。 PC访问模拟器用localhost即127.0.0.1, 模拟器 访问 模拟器用10.0.2.2 本人已成功运...

buleberry
2014/04/01
0
0
局域网内通过无线实现android设备的socket通信

我们就用最简单的socket编程吧,一个做client端一个server端。然后分析一下有几种连接情况: ANDROID与PC : android与android: 这两个是最简单的,不需要端口重定向,在无线网内肯定都有i...

我不是咸蛋
2012/08/30
0
6
Android如何区别真机和模拟器

现在的模拟器的功能太强大,从蓝牙,传感器等配件到IMEI,Mac,以及手机硬件信息什么都可以模拟 为了防止用户利用模拟器模仿真机进行刷单,刷流量等恶意操作 需要获取设备返回的一些信息来鉴别...

yizhihaohut
2015/06/03
0
2

没有更多内容

加载失败,请刷新页面

加载更多

面向对象类之间的关系

面向对象类之间的关系:is-a、has-a、use-a is-a关系也叫继承或泛化,比如大雁和鸟类之间的关系就是继承。 has-a关系称为关联关系,例如企鹅在气候寒冷的地方生活,“企鹅”和“气候”就是关...

gackey
20分钟前
0
0
读书(附电子书)|小狗钱钱之白色的拉布拉多

关注公众号,在公众号中回复“小狗钱钱”可免费获得电子书。 一、背景 之前写了一篇文章 《小狗钱钱》 理财小白应该读的一本书,那时候我才看那本书,现在看了一大半了,发现这本书确实不错,...

tiankonguse
43分钟前
0
0
Permissions 0777 for ‘***’ are too open

异常显示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ......

李玉长
45分钟前
0
0
区块链10年了,还未落地,它失败了吗?

导读 几乎每个人,甚至是对通证持怀疑态度的人,都对区块链的技术有积极的看法,因为它有可能改变世界。然而,区块链技术问世已经10年了,我们仍然没有真正的用上区块链技术。 几乎每个人,甚...

问题终结者
今天
2
0
20180921 su与sudo命令、限制root用户通过ssh远程登录

su 命令 用户切换。 su # 切换到root用户su username # 切换到username用户# su 后面加-时,会初始化当前用户的各种环境su - username # 指定用户执行某些命令 su - -c "touch /tm...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部