Android笔记:模拟器之间的Socket通讯

android项目最近开始用到socket通讯,而2个模拟器之间通讯需要借助ADB实现,这里了解下ADB。

ADB是什么:

ADB的全称为Android Debug Bridge,就是调试桥的作用,借助这个工具,我们可以管理设备或手机模拟器的状态。个人理解就是可以在pc上通过命令行查看和管理安卓设备,例如连接到电脑的安卓手机等。比较方便的是可以直接通过命令行操作。

常见操作:

(1)快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
(2)在设备上运行Shell命令;
(3)管理设备或手机模拟器上的预定端口;

(4)在设备或手机模拟器上复制或粘贴文件。

详细参考:Android的ADB工具使用

因为需要在2个模拟器之间通讯,这里我们启动2个模拟器,通过adb查看2个模拟器的状态和IP端口地址等信息。

在命令行中直接输入“adb”命令提示无法识别,来到SDK的Tools文件夹下,发现存在一个“adb_has_moved.txt”文件提示adb被移除了,百度后发现该adb在新版本中已经移动到了“platform-tools”目录下,果然在platform-tools目录下找到了该adb,在环境变量Path中加入该路径。

 然后命令行中执行adb命令就可以识别了:

OK 先一步使用ADB查看模拟器当前配置状况

 启动2个模拟器api版本都是10(plat版本2.3.3) 5554运行socket服务端 5556运行socket客户端

首先进入emulator5554设备的命令控制台

在命令行中输入如下指令

adb –s emulator-5554 shell

getprop

在结果中找到以下2行“

[net.eth0.dns1]: [10.0.2.3]

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

exit退出shell

如上继续查看emulator5556的ip配置会发现二者完全相同,那么如何进行通讯呢

Android系统为实现通信将PC机IP设置为了10.0.2.2,自身为10.0.2.15/127.0.0.1,所有安卓虚拟机默认是可以通过10.0.2.2本机联网。

如果需要修改dns可以执行

setprop net.dns1 192.168.0.1 

那么IP如何修改呢?二者的IP完全相同是无法通讯的:

据资料显示可以通过件端口映射到本机间接实现 (参考 PC电脑和Android模拟器访问及模拟器之间tcp/udp通信 

1. 运行模拟器
2. 打开window 命令行    

5554是模拟器的端口,执行之后会进入android console
 telnet 127.0.0.1  5554 

  或者

telnet localhost  5554 

3. 在console下执行:

redir add udp :端口号:端口号

redir add tcp :端口号:端口号  

例如:   

redir add tcp:8888:8888

 其中,第一个端口号是PC端口,第二个是模拟器端口。(端口映射)

   执行此命令之后,会把PC8888 端口接收的数据转到模拟器的8888端口

redir :端口定向指令 

add :添加 

tcp/udp:表示端口类型tcp、udp 

说明:redir list命令来列出已经添加的映射端口,redir del可以进行删除

通讯代码案例参考:

http://blog.163.com/fanning_7213/blog/static/2496505201137101721665/

最终还是通讯失败,经验证PC和仿真器通讯时不需要重定向端口,直接使用本机IP即可。

 

 

posted @ 2014-01-13 13:57  Merray  Views(10752)  Comments(0Edit  收藏  举报