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即可。