zoukankan      html  css  js  c++  java
  • adb client, adb server, adbd原理浅析(附带我的操作过程)

    adb是什么? adb就是Android调试桥,很形象啊。 先来看adb原理的逻辑图:

         再来进行实际操作:我的pc的ip是192.168.1.102, 我的android手机的ip为192.168.1.100

        1.  在pc上执行:netstat -nao | findstr 5037

             发现结果是空白。

        2. 执行adb shell, 肯定是进不了任何shell啊, 然后执行:netstat -nao | findstr 5037

            结果是:TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       3840

            可见3840进程正在监听5037端口, 这个进程实际上就是adb server

        3. 打开android手机,执行adb connect 192.168.1.100,  请参考我之前的博文, 确保adb能连接上手机哈。

           发现, 界面提示adb成功连接上了手机。

           执行netstat -nao | findstr 5037, 居然仍然是:TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       3840

           执行adb shell, 进入手机的android系统, 再次在pc的cmd中(非前面的shell中)执行netstat -nao | findstr 5037, 结果为:

          TCP    127.0.0.1:1571         127.0.0.1:5037         ESTABLISHED     4496
          TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       3840
          TCP    127.0.0.1:5037         127.0.0.1:1571         ESTABLISHED     3840  

           表明,adb client和adb server建立tcp连接了。

         4. 不需要退出上面的shell, 仅在另一个cmd中执行 netstat -nao | findstr 5555, 结果为:

             TCP    192.168.1.102:1559     192.168.1.100:5555     ESTABLISHED     3840

            表明, adb server和adbd建立起了tcp连接。

         5. 前面已经进入了手机的shell, 现在在shell中执行:netstat -nao | busybox grep 5555, 结果为:

             tcp       0      0 0.0.0.0:5555           0.0.0.0:*              LISTEN
             tcp       0      0 192.168.1.100:5555     192.168.1.102:1559     ESTABLISHED

             进一步证实, adb server和adbd建立起了tcp连接。

            归纳:

            adb client(pid:4496)   <--->adb server(监听5037端口, pid:3840)<--->adbd(监听5555端口, pid:未显示)

            |<-------------------------------    在 pc 端    ------------------------------> |        |<------------ 在手机端------------>|

            其中, adb server作为adb client的服务端, 而adbd又作为adb server的服务端, 实际上就是下面这个意思:

           儿子 <------------------------------> 爸爸<------------------------------------->爷爷

            

            前面我们已经说过, 也可以利用数据线来进行连接, 这里, 我就不过多再赘述了, 原理大体类似, 为了让大家更清晰, 我借鉴了网上的一幅图, 这幅图很强大, 真是太棒了:

            

           一图胜千言万语

           突然, 我想起了小时候, 一个老人给我出的题: 两个爸爸和两个儿子, 要均分3个同样的苹果, 不允许切割, 请问怎么分
    ---------------------
    作者:stpeace
    来源:CSDN
    原文:https://blog.csdn.net/stpeace/article/details/24933813
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    octotree神器 For Github and GitLab 火狐插件
    实用篇如何使用github(本地、远程)满足基本需求
    PPA(Personal Package Archives)简介、兴起、使用
    Sourse Insight使用过程中的常使用功能简介
    Sourse Insight使用教程及常见的问题解决办法
    github 遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts问题解决
    二叉查找树的C语言实现(一)
    初识内核链表
    container_of 和 offsetof 宏详解
    用双向链表实现一个栈
  • 原文地址:https://www.cnblogs.com/decode1234/p/9930605.html
Copyright © 2011-2022 走看看