Android “adb forward”端口映射
来源:互联网 发布:php fpm 执行脚本原理 编辑:程序博客网 时间:2024/05/21 12:27
引自:http://mandapeng.vip.zhourenjian.com/?p=7
简析adb的端口映射功能,将PC端的某端口数据重定向到手机端的一个端口
================================================
曾经以为adb forward是个好东东,因为通过这个映射之后,在PC和设备之间就可以直接socket通信了。可现在终于发现,世界不是完美的。
Android Debug Bridge设计的目的,一是用来管理所有连接的设备;二是提供各种服务,供PC端有效的控制设备。主要包括三个部分:
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发来的请求,并作出对应操作。
这三个可执行程序都是同一套代码编译出来的,位于<Android Source Dir>/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有点区别。
在TCP网络编程中,Client的Socket(C)如果调用Connect()成功,就说明已经和Server端的Socket(S)连接上, 可以通讯了。但是如果使用adb forward做端口映射,就不一样了。端口映射的实质是,让ADB-server作为一个switcher转发ADB-client的数据包,送给 adbd,adbd再发给设备端的对应端口。因此一旦建立了映射,就相当于ADB-server开始监听这个目标端口。而此时如果有C去尝试 Connect这个端口,是一定会成功的,因为与C连接的是ADB-server,而非真正的设备上的目标程序。这就出现了,即使Connect()成 功,却完全无法知道究竟是否成功连接到S。
因此,判断真正连接成功的方法,只有轮询收发握手数据包。程序中约定好事先做个交互:C发送一个数据包,等待S回复;C如果收到了S的回复包,说明 连通;如果接收超时,则认为没有连通。在没有连通的情况下,需要重新建立Socket,并Connect(),然后再尝试握手。
- Android “adb forward”端口映射
- “adb forward”端口映射(转)
- android adb port forward
- Android 使用adb forward调试小型嵌入式web服务器
- adb forward交互流程
- adb forward 作用
- adb forward nc dd
- 浅析adb命令 - adb forward交互流程
- 浅析adb命令 - adb forward交互流程
- 浅析adb命令 - adb forward交互流程
- 浅析adb命令 - adb forward交互流程
- android udp 端口映射方法
- android模拟器 建立端口映射
- android udp 端口映射方法
- UPNP端口映射Android实现
- ADB Forward遇到的问题总结
- 修改adb以支持forward远程连接
- android adb 全面支持中文,支持输入中文, 同时连接大量手机,解决 forward 不稳定 支持模拟器
- 如何使用log4j记录日志
- 自定义ANDROID标题栏TITLEBAR布局
- 黑马学习笔记——如何改变gridview中gridline的样式(颜色等)!
- 模板应用--观察者模式
- 以samba讲解如何交叉编译开源库用于iphone平台
- Android “adb forward”端口映射
- Java项目如何记录日志
- 130만명 19년간 추적(追踪)해보니.. "흡연이 암의 원인"
- Perf -- Linux下的系统性能调优工具,第 2 部分
- 如何使用log4j记录日志
- Itween的基本用法
- LeetCode - Pascal's Triangle
- Json:下载、编译、示例、Jsoncpp,Windows/Linux
- hibernate中identity和increment区别