adb通信原理分析
关于这个问题,自己研究了一下,没有研究出来
在网络上搜罗了一下,基本上关于ADB的原理用了两张图表示:
我表示没有看懂这两个图,
又开始查阅一些一些资料:
首先知道adb的通信有Socket,那么socket是什么呢?

实现一个简单的socket通信:
java程序,运行java类即可。弄一个简单的服务器:
import java.io.*;
import java.net.*; public class SimpleServer {
public static void main(String[] args) throws IOException { // 创建一个ServerSocket,用于监听客户端socket的连接请求
ServerSocket server = new ServerSocket(30001); // 采用循环方式不断接受来自客户端的请求
while (true) {
// 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
Socket s = server.accept();
//获取输出流
writer.flush();
writer.close();*/ //通过输出流 向socket中写数据
OutputStream os=s.getOutputStream();
os.write("你好,我是服务器".getBytes("utf-8"));
os.close();
s.close();
}
}
}
simpleClient.java
- package com.example.simplecilent;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.Socket;
- import android.os.Bundle;
- import android.app.Activity;
- import android.view.Menu;
- import android.widget.EditText;
- public class SimpleClient extends Activity {
- EditText show;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- show =(EditText)findViewById(R.id.show);
- //关闭输入流、socket
- try
- {
- Socket socket = new Socket("10.0.2.2" ,30001);
- //将Socket对应的输入流包装成BufferedReader
- //将服务器中传过来的数据 通过Inputstream读出来
- BufferedReader br = new BufferedReader(
- new InputStreamReader(socket.getInputStream()));
- //进行普通IO操作
- String line = br.readLine();
- show.setText("收到了服务器的数据,内容是:" + line);
- br.close();
- socket.close();
- }
- catch (IOException e)
- {
- e.printStackTrace();
- }
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <EditText
- android:id="@+id/show"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:cursorVisible="false"
- android:editable="false" >
- </EditText>
- </LinearLayout>
实现的效果图:
多线程方面参考:http://blog.csdn.net/u012605629/article/details/40481307

adb通信原理分析的更多相关文章
- 基于web的IM软件通信原理分析
关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...
- UDP广域网,局域网通信-原理分析,穿透技术
一.UDP局域网通信. 这个比较简单,关于局域网中的2台或者更多的计算机之间的UDP通信,网络上一大把,直接复制粘贴就可以使用,原理也非常简单.所以,本文不做详细介绍. 二.UDP广域通信(包括路由器 ...
- C#UDP广域网,局域网通信-原理分析
一.UDP局域网通信. 这个比较简单,关于局域网中的2台或者更多的计算机之间的UDP通信,网络上一大把,直接复制粘贴就可以使用,原理也非常简单.所以,本文不做详细介绍. 二.UDP广域通信(包括路由器 ...
- Android中线程间通信原理分析:Looper,MessageQueue,Handler
自问自答的两个问题 在我们去讨论Handler,Looper,MessageQueue的关系之前,我们需要先问两个问题: 1.这一套东西搞出来是为了解决什么问题呢? 2.如果让我们来解决这个问题该怎么 ...
- android adb 流程原理代码分析(一)
由于要用到adb的知识,但是对adb啥也不了解,看了下android的代码,adb的源码在system/core/adb下面,然后网上搜下了资料,发现很多大神的源码分析,瞬间信心爆棚,把大神写的博客都 ...
- ZT自老罗的博客 Android系统的智能指针(轻量级指针、强指针和弱指针)的实现原理分析
Android系统的智能指针(轻量级指针.强指针和弱指针)的实现原理分析 分类: Android 2011-09-23 00:59 31568人阅读 评论(42) 收藏 举报 androidclass ...
- 【Web技术】276- WebView缓存原理分析和应用
前言 混合式开发,在产品体验以及页面加载速度的体验上已经非比以往的.今日早读文章由@unclechen分享. 正文从这开始- 一.背景 现在的App开发,或多或少都会用到Hybrid模式,到了WebV ...
- 转载:AbstractQueuedSynchronizer的介绍和原理分析
简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...
- (转)Android 系统 root 破解原理分析
现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...
随机推荐
- 关于 try catch catch
catch 和 finally 一起使用的常见方式是:在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源. public class abc { st ...
- ADF_Controller系列2_绑定TasksFlow、Region和Routers(Part2)
2015-02-14 Created By BaoXinjian
- DOM节点访问
简而言之,DOM(即文档对象模型)是一种将XML或HTML文档解析成树形节点的方法.通过DOM的方法与属性,我们就可以访问到页面中的任何元素,并进行元素的修改.删除以及添加的操作.同时,DOM也是一套 ...
- HTC Vive开发笔记之手柄震动
手柄震动的代码SteamVR_Controller脚本的最上面的注释里面就有说明,其实也很简单 // Example usage: //这个栗子是左手柄震动 右手震动只需把Leftmost换成Righ ...
- php Base64编码/解码
一.PHP使用方法 //加密 $str = 'This is an encoded string'; echo base64_encode($str); //解密 $str = 'VGhpcyBpcy ...
- Drools给日志打标签
一.定义日志模型 public class Logger { // 日志编号 private String id; // 目标IP private String targetIp; // 目标端口 p ...
- mac配置impala odbc
下载mac对应驱动并安装:http://www.cloudera.com/downloads.html.html *HOST 地址是impala Daemon所在的机器ip,端口可以在cm中设置 vi ...
- quartus II PIN脚相关之一
FPGA设计中有时候会改变输入输出名称,但是会带来一个问题,在PIN 叫配置页面上会有余留的久名称的Pin脚.如实例中,把 FPGA_CLK_50MHZ 名称修改为 FPGA_CLK,经过编译综合之后 ...
- CSS :hover伪类选择定义和用法
伪类选择符E:hover的定义和用法: 设置元素在其鼠标悬停时的样式.E元素可以通过其他选择器进行选择,比如使用类选择符.id选择符.类型选择符等等.特别说明:IE6并非不支持此选择符,但能够支持a元 ...
- oracle查看所有表的数据量并排序
源地址:http://blog.csdn.net/zhanggnol/article/details/6683697 select t.table_name,t.num_rows from user_ ...