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
版权声明:本文为博主原创文章,转载请附上博文链接!
adb client, adb server, adbd原理浅析(附带我的操作过程)的更多相关文章
- adb client, adb server, adbd原理浅析(附带我的操作过程)【转】
本文转载自:http://blog.csdn.net/stpeace/article/details/24933813 adb是什么? adb就是Android调试桥,很形象啊. 先来看adb原理的逻 ...
- adb root错误信息adbd cannot run as root in production builds问题解决
adb root错误信息adbd cannot run as root in production builds问题解决 一.问题描述 1.输入指令 >adb root adbd cannot ...
- [ADB]ADB(Android Debug Bridge)简介及基础(不包含命令)
"Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an ...
- 【原创】Android开发之ADB及ADB SHELl命令的应用
adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.adb的工作方式比 ...
- 沉淀,再出发:docker的原理浅析
沉淀,再出发:docker的原理浅析 一.前言 在我们使用docker的时候,很多情况下我们对于一些概念的理解是停留在名称和用法的地步,如果更进一步理解了docker的本质,我们的技术一定会有质的进步 ...
- adb、adb shell am、adb shell pm命令的详细使用说明
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/64183248 1.在命令行终端执行下面的命令: adb >adb.txt 2 ...
- ngrok原理浅析(转载)
之前在进行 微信Demo开发时曾用到过 ngrok这个强大的tunnel(隧道)工具,ngrok在其github官方页面上的自我诠释是 "introspected tunnels to lo ...
- Android 怎样开启与关闭adb 的认证机制(google adb secure) (adb RSA 指纹认证)
前言 欢迎大家我分享和推荐好用的代码段~~声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- Netty Client和Server端实现
本文基于Nett4.0.26.Final版本浅析Client与Server端通讯,先看服务器端: public class Server { public static void run(int po ...
随机推荐
- jquery 报错 Uncaught TypeError: Illegal invocation
遇到这个错误 请检查你的ajax提交方法的参数 1 参数是否都有定义 2 参数个数是否一致 3参数是否都有值(******)
- Hadoop HA 机制学习
一.Hadoop 系统架构 1.1 Hadoop1.x和Hadoop2.x 架构 在介绍HA之前,我们先来看下Hadoop的系统架构,这对于理解HA是至关重要的.Hadoop 1.x之前,其官方架构如 ...
- 运行Junit方法项目启动不了
从控制台看不出任何有用信息,通过JUnit右键”Copy Failure List”将信息拷贝出来 TestStart.start initializationError(org.junit.runn ...
- 201671010127 2016-2017-11 Java图形用户界面设计技术
一.事件处理器 1.什么是事件处理 一个事件要求特定的动作被执行,它被作为消息由外界或系统自身发送给GUI系统.这些事件包括来自计算机设备如鼠标键盘和网络端口的I/O中断,以及GUI系统的逻辑事件触发 ...
- Unmarshaller解析xml文件
参考地址:http://linbulu.iteye.com/blog/2295919 Girl.xml文件 <?xml version="1.0" encoding=&quo ...
- CocoaPods安装/更新报错While executing gem ... (OpenSSL::SSL::SSLError)解决方案
今天给新买的MacBook Pro更新CocoaPods,结果上来就报错,出师不利. HeinocdeMacBook-Pro:~ Heinoc$ sudo gem update --system Pa ...
- JAVA中Colllection的基本功能
Collection中的add方法: 代码: public static void main(String[] args) { // TODO Auto-generated method ...
- Spring注解配置Aop
之前学习了SpringAop的基本原理.http://www.cnblogs.com/expiator/p/7977975.html 现在尝试使用注解来配置SpringAop. Aop,面向切面编程. ...
- nodejs中yield的用法?
nodejs中yield的用法? https://www.zhihu.com/question/32752866?sort=created
- oracle的约束隐式创建索引和先索引后约束的区别
oracle的约束隐式创建索引和先索引后约束的区别 两种情况:1.对于创建约束时隐式创建的索引,在做删除操作的时候: 9i~11g都会连带删除该索引 2.对于先创建索引,再创建约束(使用到此索引)这种 ...