模拟器之间的Socket通讯

来源:互联网 发布:dijkstra算法的优点 编辑:程序博客网 时间:2024/06/05 16:28

http://www.cnblogs.com/shaocm/p/3517031.html

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可以执行

?
1
setprop net.dns1 192.168.0.1

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

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

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

?
1
5554是模拟器的端口,执行之后会进入android console
?
1
<EM><SPANstyle="LINE-HEIGHT: 1.5; BACKGROUND-COLOR: #ffffff; FONT-FAMILY: verdana, Arial, Helvetica, sans-serif; FONT-SIZE: 14px"> </SPAN></EM>telnet 127.0.0.1  5554

  或者

?
1
telnet localhost  5554

3. 在console下执行:

redir add udp :端口号:端口号

redir add tcp :端口号:端口号  

例如:   

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

经验证的socket通讯问题

1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2  如本机的静态地址为192.168.1.2 则直接使用该地址

2.接收和连接代码不能在UI主线程中进行必须在子线程中进行  个人习惯使用Runable 和Handler来处理 

3.邮件服务错误 设置-应用-全部-Exchange Services 停用

4.Unexpected value from nativeGetEnabledTags: 0

无影响直接在Logcat中过滤

by Log Message :^(?!.*(nativeGetEnabledTags)).*$

 5.端口连接失败-删除工作空间下的.meta文件夹重新添加项目后连接成功

参考:http://blog.csdn.net/wuchuanpingstone/article/details/6617276 

 

0 0
原创粉丝点击