android|adb forward的细节(1)(原理概述)

adb forward的细节(1):原理概述
【android|adb forward的细节(1)(原理概述)】本系列文章从adb forward tcp:11111 tcp:22222说起,介绍adb forward的一些细节,包括adb forward的相关代码,adb forward在drozer上的使用,以及如何利用adb forward开发一个PC端和手机端通信的工具。
本文是本系列文章中的第一篇,介绍adb forward的大致原理,目的是看完这篇之后可以对adb forward有个清晰的理解。
顾名思义,adb forward的功能是建立一个转发,adb forward tcp:11111 tcp:22222的意思是,将PC端的11111端口收到的数据,转发给到手机中22222端口。但是光执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是:

  • (a)在手机端,建立一个端口为22222的server,并打开server到监听状态。
  • (b)在PC端,建立一个socket client端,连接到端口为11111的server上。
这两个步骤有先后顺序,步骤(a)要先执行。
adb forward tcp:11111 tcp:22222 可以在步骤(a)之前执行。
★ adb forward 的一些基本操作
配好adb的环境,连上手机,执行adb forward tcp:11111 tcp:22222,如果执行成功的话,没有任何输出,如下:
$ adb forward tcp:11111 tcp:22222

此时,通过运行adb forward --list查看刚才的执行结果。
$ adb forward --list 4391b53a tcp:11111 tcp:22222

可以通过adb forward --remove tcp:11111删除建立的转发。
$ adb forward --remove tcp:11111

adb forward 命令的一些帮助信息,可以直接执行adb看到。
★ PC端,端口为11111的server
执行adb forward tcp:11111 tcp:22222之后,通过netstat -a 可以看到下面的信息:
TCP127.0.0.1:11111LAPTOP-B0112F9S:0LISTENING

在PC端,adb forward创建了一个监听本机11111端口的server。通过adb 转发的数据,需要先发到11111端口(在本例中如此)。这个11111端口是约定好的,你也可以改成其他端口。
PC端的应用通过socket连接到11111端口,以准备发送数据。但是连接到11111端口之前,还需要在手机端启动端口为22222的server。
★ 手机端,端口为22222的server
在PC端的应用开始连接之前,手机端要启动端口为22222的server(socket server)。
手机中adb的daemon进程将连接到22222端口,这样PC端应用就可以连接PC端的11111端口了,连接上之后就可以从PC端的应用发送数据给手机端的应用,手机端的应用也可以发送数据给PC端的应用。
★ 总结
画一个示意图,可以更清楚的说明。
android|adb forward的细节(1)(原理概述)
文章图片

  • PC端的应用与手机端应用通信建立的过程:
    (1)执行adb forward tcp:11111 tcp:22222
    (2)启动手机端应用,建立端口为22222的server,并处于监听状态(LISTENING)
    (3)启动PC端应用,连接端口为11111的server(adb创建的)
    之后,就可以传输数据了。
  • PC端的应用与手机端应用之间传输数据的过程:
    (1)PC端应用将数据发送给端口为11111的server(adb创建的)
    (2)adb将数据转发给手机端adbd进程(通过USB传输)
    (3)adbd进程将数据发送给端口为22222的server(手机端应用创建的)
    传递是双向的,第(1)和第(3)步是通过socket实现的,所以通过socket的读和写就完成了PC端应用和手机端应用的数据传递。
★ 参考
https://developer.android.com/studio/command-line/adb.html
同系列文章:
adb forward的细节(4):使用adb forward打造一个PC端与手机端交互的工具

    推荐阅读