日志 教程
当前位置: 教程  >  游戏开发  >  手机游戏开发  >  正文

Android ADB Forward遇到的问题总结

作者:吴镇风 发表于 2011/7/25 19:20:42     评论(0)     阅读(7525)     

最近在项目中发现adb forward在使用中会有问题,总结留待以后查看。

  在Device中启动app,同时开启线程A,创建server socket监听PC连接,如果PC连接成功后,结束线程并关闭该连接,同时启动另一个app,同样开启线程B,创建server socket监听PC发送的数据。由于设计问题,PC在连接线程B的socket时,只发送一次数据并等待响应,此时经常会出现PC成功建立连接,但是发送数据时马上收到-1响应,表示线程B的socket并没有于PC连接成功,返回Device中查看log确实server处于accpet的等待连接状态。

  至于问题发生的原因,经过网上查询发现原来是ADB Forward在搞鬼,因此转以下查询到的文章备用:

  1) ADB-server

  运行在PC端,是一个始终在后台运行的进程,作为与手机端交互的唯一接口。ADB-server处理ADB-client的请求,一部分请求无须与设备交互,直接在PC本地完成;剩下的请求需要与设备端的adbd交互,ADB-server起到了一个switcher的作用。

  2) ADB-client

  运行在PC端,可以同时存在多个。每个ADB-client由用户启动,完成多种功能。其作用是与ADB-server交互,实现用户请求的功能。

  3) adbd

  运行在设备端的常驻进程,同时只存在一个。作用是接收PC端的ADB-server发来的请求,并作出对应操作。

  这三个可执行程序都是同一套代码编译出来的,位于/system/core/adb/

  ADB-client和ADB-server对应同一个可执行文件“adb(.exe)”,编译时有-DADB_HOST=1宏。而adbd对应目标设备上的可执行文件"adbd",编译时的参数是-DADB_HOST=0。

  . P C Device

  -------------------------------------- -------------------------------------

  [ADB-client]<----->[Port A:] [:Port A']<------>[Program A]

  [ADB-client]<----->[Port B:]ADB-server<----->adbd[:Port B']<------>[Program B]

  [ADB-client]<----->[Port C:] [:Port C']---------(empty)

  . |<--------Android Debug Bridge---------->|

  (这个图实在是调不好了,不管了)

  ADB提供了PC与设备交互的桥梁,结构上清晰明了。其中adb forward功能提供了端口映射,希望给用户提供透明的socket通信。但可惜,这与真实的网络socket有点区别。

评论
显示
悄悄话
汇众教育官网 | 联系方式 | 版权声明 | 友情链接
Copyright 2008© 汇众益智(北京)教育科技有限公司. All Rights Reserved
')京ICP备09092043号 京公网安备11010802009023号