Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >adb命令 - adb forward交互流程adb命令 - adb forward交互流程

adb命令 - adb forward交互流程adb命令 - adb forward交互流程

作者头像
一个会写诗的程序员
发布于 2018-08-20 02:01:41
发布于 2018-08-20 02:01:41
3.1K00
代码可运行
举报
运行总次数:0
代码可运行

adb命令 - adb forward交互流程

命令: adb forward tcp:6100 tcp:7100 // PC上所有6100端口通信数据将被重定向到手机端7100端口server上

或者 adb forward tcp:6100 local:logd // PC上所有6100端口通信数据将被重定向到手机端UNIX类型socket上

通过adb forward我们可以接收手机端server[或者unix域socket]程序发出的所有数据, 并且可以用自己写的小程序向手机端server[或者unix域socket]发送我们自己的数据[luther.gliethttp] 表示在PC的HOST端创建一个server监听6100端口,pc上的其它应用程序,比如:A,可以以client身份和6100端口server建立连接, 之后A发送的所有数据将透明传递到手机端监听7100端口的一个应用程序,比如浏览器程序[luter.gliethttp]. 代码流程如下: 1.在pc上执行adb forward tcp:6100 tcp:7100指令,该指令尝试连接5037端口,触发HOST回调函数ss_listener_event_func执行. 2.ss_listener_event_func将为该次连接创建一个local_socket,之后等待该local_socket数据[luther.gliethttp], 3.当local_socket数据,即"host:forward:tcp:6100;tcp:7100",到来之后,将执行local_socket_event_func回调函数,读取数据之后交由smart_socket_enqueue==>handle_host_request 4.handle_host_request==>install_listener("tcp:6100", "tcp:7100", transport); 创建server监听端口socket_loopback_server(6100, SOCK_STREAM);当有客户端连接该端口是执行listener_event_func回调函数 5.现在pc上我们写了一个自己的小应用程序B,和6100端口的server建立连接,于是HOST上的listener_event_func回调函数执行.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static void listener_event_func(int _fd, unsigned ev, void *_l)  
{  
    alistener *l = _l;  
    asocket *s;  
    if(ev & FDE_READ) {  
        struct sockaddr addr;  
        socklen_t alen;  
        int fd;  
        alen = sizeof(addr);  
        fd = adb_socket_accept(_fd, &addr, &alen); // 首先接受该连接  
        if(fd < 0) return;  
        gliethttp_server = create_local_socket(fd); // 为我们的小应用程序建立维护对象gliethttp_server  
        if(gliethttp_server) {  
            gliethttp_server->transport = l->transport;  
            connect_to_remote(gliethttp_server, l->connect_to); // 发送"tcp:7100"到手机端,手机端将建立一个与7100端口server链接的gliethttp_client,作为  
                                                 // 与HOST这里建立的gliethttp_server对象进行数据传输的手机端程序[luther.gliethttp]  
                                                 // 如果成功连接之后,手机端adbd将返回"OKAY",进而gliethttp_server和gliethttp_client将绑定在一起  
                                                 // gliethttp_server发送的数据将通过HOST的daemon直接传递给gliethttp_client  
                                                 // gliethttp_client数据将通过手机的adbd直接发送给HOST的gliethttp_server,然后传递给我们的小程序B[lutehr.gliethttp]  
            return;  
        }  
        adb_close(fd);  
    }  
}  
void connect_to_remote(asocket *s, const char *destination)  
{  
    D("Connect_to_remote call /n");  
    apacket *p = get_apacket();  
    int len = strlen(destination) + 1;  
    if(len > (MAX_PAYLOAD-1)) {  
        fatal("destination oversized");  
    }  
    D("LS(%d): connect('%s')/n", s->id, destination);  
    p->msg.command = A_OPEN; // 打开手机端"tcp:7100"端口  
    p->msg.arg0 = s->id;  
    p->msg.data_length = len;  
    strcpy((char*) p->data, destination);   
    send_packet(p, s->transport);  
}  

在手机端 output_thread线程将接收到的数据传递给t->transport_socket句柄,该句柄将调用transport_socket_events==>handle_packet 回调函数进一步处理我们的"tcp:7100"命令. handle_packet==> gliethttp_client = create_local_service_socket("tcp:7100");创建维护对象gliethttp_client, 进一步执行socket_loopback_client("7100", SOCK_STREAM);尝试打开手机端的7100端口(这时手机端应该已经打开监听7100端口的server程序)[luther.gliethttp]. 之后create_remote_socket(p->msg.arg0, t);表示gliethttp_client从手机端7100端口server上接收到的数据将全部传递给 HOST端的gliethttp_server端口,进而传递给我们的小程序B[luther.gliethttp].

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.04.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TCP半关闭状态分析和skynet对半关闭状态的支持
TCP四次挥手中的半关闭状态是否需要解决,依赖于使用场景,大多数场景不解决也不会有影响,但有些场景(特别是游戏服务器)还是需要关注这个半关闭状态的。
Lion 莱恩呀
2025/07/16
1580
TCP半关闭状态分析和skynet对半关闭状态的支持
Envoy请求流程源码解析(二)|请求解析
Envoy 是一款面向 Service Mesh 的高性能网络代理服务。它与应用程序并行运行,通过以平台无关的方式提供通用功能来抽象网络。当基础架构中的所有服务流量都通过 Envoy 网格时,通过一致的可观测性,很容易地查看问题区域,调整整体性能。
灵雀云
2022/03/03
1.7K0
Envoy请求流程源码解析(二)|请求解析
深入浅出 Redis client/server交互流程
最近笔者阅读并研究Redis源码,在Redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握。所以这里我尝试,站在源码的角度,将Redis client/server 交互流程尽可能简单地展现给大家,同时也站在DBA的角度给出一些日常工作中注意事项。
子润先生
2021/06/18
1.4K0
ADB通信协议
  PC端有一个ADB.exe,它既是Client,也是Server,而Daemon则是存在于手机端,Daemon需要在开发者模式中手动开启。
大A
2023/03/23
1.7K0
ADB通信协议
Istio Ambient 模式流量管理实现机制详解(三)
本文将继续介绍 ambient 模式下四层流量处理的实现机制。本文将以 bookinfo 应用中 productpage 访问 reviews 的请求路径为例进行分析,以理清一个请求从 client 端发出到 server 端处理的完整流程。
赵化冰
2022/10/31
5260
CS 144 Lab Four 收尾 -- 网络交互全流程解析
这里以tcp_ipv4.cc文件为起点,来探究一下cs144是如何实现整个协议栈的。
大忽悠爱学习
2023/10/11
3610
CS 144 Lab Four 收尾 -- 网络交互全流程解析
mbed TLS 简明教程(二)
译者:远方的自由 转载请注明出处: http://blog.csdn.net/z2066411585 上一篇文章mbed TLS 简明教程(一) 简要描述了mbed TLS. 下面主要通过示例程序来说明mbed tls的连接过程. 示例客户端  让我们假设有一个简单的网络客户端,试图打开一个到HTTP服务器的连接并读取默认页面.应用程序如下: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #
程序手艺人
2018/05/18
7K0
Istio Ambient 模式流量管理实现机制详解(三)
本文将继续介绍 ambient 模式下四层流量处理的实现机制。本文将以 bookinfo 应用中 productpage 访问 reviews 的请求路径为例来分析一个请求从 client 端发出到 server 端处理的四层流量处理流程。
赵化冰
2023/02/25
3720
Istio Ambient 模式流量管理实现机制详解(三)
vppinfra---socket api
今天来学习一下vpp底层基础库--socket相关api及结构体,往期相关的文章请翻看文末链接。
dpdk-vpp源码解读
2023/03/07
9300
vppinfra---socket api
Istio 中实现客户端源 IP 的保持
尹烨,腾讯专家工程师, 腾讯云 TCM 产品负责人。在 K8s、Service Mesh 等方面有多年的实践经验。 导语 对于很多后端服务业务,我们都希望得到客户端源 IP。云上的负载均衡器,比如,腾讯云 CLB 支持将客户端源IP传递到后端服务。但在使用 istio 的时候,由于 istio ingressgateway 以及 sidecar 的存在,后端服务如果需要获取客户端源 IP,特别是四层协议,情况会变得比较复杂。 正文 很多业务场景,我们都希望得到客户端源 IP。云上负载均衡器,比如,腾讯云 C
腾讯云原生
2022/06/08
2.7K0
Istio 中实现客户端源 IP 的保持
golang网络框架netpoll(Multi-Reactor模型)核心源码分析
netpoll是字节不久前开源的一款golang编写的高性能网络框架(基于Multi-Reactor模型),旨在用于处理rpc场景,详细的介绍可参见下图介绍。
jaydenwen123
2022/03/30
4.2K1
golang网络框架netpoll(Multi-Reactor模型)核心源码分析
glusterfs客户端挂载流程
Glusterfs 基本原理 Glusterfs 是基于fuse的分布式存储,功能上支持分布式/3副本/EC三种存储方式。Glusterfs采用堆栈式的架构设计,服务端和客户端采用translator. GlusterFS概念中,由一系列translator构成的完整功能栈称之为Volume,分配给一个volume的本地文件系统称为brick,被至少一个translator处理过的brick称为subvolume。客户端是由于volume类型来加载对应的translator,服务端也是一样,根据不同的volume的类型加载translator。客户端(glusterfs)通过挂载时候提供节点IP地址,来对应节点的服务端管理进程通信,获取brick源信息、客户端需要加载的配置,客户端根据配置初始化xlator,后续IO的流程按照xlator的顺序经过每个xlator的fop函数,然后直接和对应的glusterfsd的进程交互IO操作。glusterfsd也是一样,根据服务端配置文件,初始化服务端需要加载xlator,进行每个xlator的fop的操作,最终执行系统IO函数进行IO操作。节点的管理服务(glusterd),仅仅加载一个管理的xlator,处理来自glusterfs/gluster的请求,不会处理对应的IO操作操作。
用户4700054
2022/08/17
2.2K0
glusterfs客户端挂载流程
玩转ADB命令(ADB命令使用大全)
我相信做Android开发的朋友都用过ADB命令,但是也只是限于安装应用push文件和设备重启相关,更深的就不知道了,其实我们完全可以了解多一点,有一些不常用的场景我们至少应该知道它可以做到,比如,我们知道adb install 却不知道adb shell am start。前者是用来安装软件,后者用来打开软件,后者的一个使用场景让我对他重视:公司定制Android系统,在调试屏幕的时候要看是否满屏验证驱动是否正常,比较麻烦的做法是要拿到Android开发者手里用eclipse或者其他ide安装打开。显然相对于驱动人员连上数据线使用adb命令要复杂得多。因此,了解多一点还是很有必要的。
全栈程序员站长
2022/08/27
10.1K0
玩转ADB命令(ADB命令使用大全)
『移动端测试必备』ADB常用命令和使用
虫无涯
2023/11/28
7540
【译】使用 SO_REUSEPORT 套接字开发高并发服务
原文地址:https://blog.flipkart.tech/linux-tcp-so-reuseport-usage-and-implementation-6bfbf642885a
黑光技术
2023/02/23
8570
【译】使用 SO_REUSEPORT 套接字开发高并发服务
Istio中的流量配置
Istio的数据面会在pod中注入两个容器:istio-init和istio-proxy。
charlieroro
2020/09/22
2.5K0
Istio中的流量配置
常用adb操作命令详解
这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示
软件测试君
2019/06/03
1.6K0
网络基础
《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。书是比较老了,anyway,还是本很好的书
中龙技术
2022/09/29
1.5K0
网络基础
必须掌握的ADB命令 | 让你的测试事半功倍
ADB的全称是Android Debug Bridge,是一个与模拟器或者连接设备通讯的桥梁。ADB是CS结构包含三个部分:
京东技术
2018/07/30
8.8K0
必须掌握的ADB命令 | 让你的测试事半功倍
adb操作命令详解及大全
android create avd –name 名称 –target 平台编号
全栈程序员站长
2022/07/01
2.2K0
adb操作命令详解及大全
相关推荐
TCP半关闭状态分析和skynet对半关闭状态的支持
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档