模拟器之间的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可以执行
setprop net.dns1 192.168.0.1
那么IP如何修改呢?二者的IP完全相同是无法通讯的:
据资料显示可以通过件端口映射到本机间接实现 (参考 PC电脑和Android模拟器访问及模拟器之间tcp/udp通信 )
1. 运行模拟器
2. 打开window 命令行
5554是模拟器的端口,执行之后会进入android console
<
EM
><
SPAN
style="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
或者
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即可。
经验证的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
- 模拟器之间的Socket通讯
- 实现两台Android模拟器之间的Socket通讯
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- android socket通讯,PC和模拟器,两个模拟器之间的通信
- Socket与ServerSocket之间的通讯
- java与c之间的socket通讯
- winform与unity之间的Socket通讯
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器的ip获取以及模拟器之间socket通信
- Android模拟器与本地服务器的socket通讯
- Windows下使用Cygwin编译MySQL客户端
- java基础知识——java概述
- I'm using Python 2.7.2 ImportError No module named bz2
- 日经社説 20150511 軍民両用研究は公開を原則に
- Java基本概念与问题
- 模拟器之间的Socket通讯
- Xcode 5 系列单元测试教程
- 日经社説 20150511 ネット時代の新しい働き方を育みたい
- 完整的日历表格
- iOS开发---ObjC标志
- 获取webapp目录
- 【树型DP】BZOJ1564 二叉查找树(noi2009)
- (1)Introduction
- MD5加密