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_request4.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回调函数执行.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].
adb forward交互流程的更多相关文章
- javaweb 与jsp页面的交互流程 (初次接触时写)
javaweb 与jsp页面的交互流程 javaweb项目目录 1. javaweb项目的一般目录: 2. jsp 页面一般情况下放在 top(前台页面) back(后台页面) 3. 后台代码 放在s ...
- 深入浅出 Redis client/server交互流程
综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...
- 关于AJAX 的交互模型、交互流程及代码示范
AJAX = 异步JavaScript + XML. 它是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况 ...
- 软件测试面试必问--bug交互流程
目前市场主要用的bug管理工具:禅道.jira.QC.bugfree等,当然也有自己公司开发的. 不过不管哪一种工具,核心交互流程都是差不多的,只是字段的名称不一样而已,参考如下两张示意图: 这是前几 ...
- coTurn 运行在Windows平台的方法及服务与客户端运行交互流程和原理
coTurn是一个开源的STUN和TURN及ICE服务项目,只是不支持Windows.为了在window平台上使用coTurn源码,需要在windows平台下安装Cygwin环境,并编译coTurn源 ...
- bing背单词交互流程 - Chongyang Bai
昨天和travis,钟秋开会确认了bing背单词的手机界面交互流程.我在这里简单描述一下,设计页面暂时不能贴出来,期待大家的宝贵意见 b( ̄▽ ̄)d. 单词本浏览界面:单词本被分为两类,用户单词本和单 ...
- 170621 - Android ADB forward端口映射和reverse反向代理 使用笔记
个人理解 forward:端口映射 将本地PC指定Port端口,映射到设备手机指定Port端口上.以便解决 PC -> Phone 的访问问题PC 作为Client客户端 可以任意访问 Phon ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-3.微信Oauth2.0交互流程讲解
笔记 3.微信Oauth2.0交互流程讲解 简介:讲解微信Oauth2.0交互流程 参考:https://open.weixin.qq.com/cgi-bin/sho ...
- JAVAEE 和项目开发(第二课:HTTP协议的特点和交互流程)
HTTP 的概念和介绍 概念:超文本传输协议(Hyper Text Transfer Protocol) 作用:规范了浏览器和服务器的数据交互 特点: 简单快速:客户向服务器请求服务时,只需传送请求方 ...
随机推荐
- JQuery的ajaxFileUpload的使用
https://www.cnblogs.com/zhanghaoliang/p/6513964.html 最近在工作中使用了Jquery的ajaxFileUpload的图片上传插件,感觉这种异步上传的 ...
- [leetcode]Triangle @ Python
原题地址:https://oj.leetcode.com/problems/triangle/ 题意: Given a triangle, find the minimum path sum from ...
- Spring Boot 集成Shiro和CAS
Spring Boot 集成Shiro和CAS 标签: springshirocas 2016-01-17 23:03 35765人阅读 评论(22) 收藏 举报 分类: Spring(42) 版 ...
- win10安装jdk以及配置环境变量
本人使用的jdk版本:jdk-8u171-windows-x64.exe, 1.安装jdk: 双击 jdk-8u171-windows-x64.exe ,然后就是简单的安装流程,安装文件位置建议保持默 ...
- 如何在Centos7上安装和使用ZFS
导读 ZFS文件系统的英文名称为ZettabyteFileSystem,也叫动态文件系统(DynamicFileSystem),是第一个128位文件系统.最初是由Sun公司为Solaris10操作系统 ...
- HttpWebRequest抓取网页数据返回异常:远程服务器返回错误: (503) 服务器不可用
解决方法: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webURL); //声明一个H ...
- artTemplate 原生 js 模板语法版
在页面中引用模板引擎: <script src="dist/template-native.js"></script> 下载 表达式 <% 与 %&g ...
- 【Linux】Ubuntu配置服务自启动 sysv-rc-conf
在Ubuntu下,配置服务系统开机自启动,使用的不是chkconfig,而是sysv-rc-conf. 且看如下: 安装: sudo apt-get install sysv-rc-conf 帮助信息 ...
- Performance Tuning Guidelines for Windows Server 2012
http://msdn.microsoft.com/en-us/library/windows/hardware/jj248719.aspx This guide describes importan ...
- 实验室报告:VMware vSphere Data Protection
dd Lab Reports VMware vSphere Data Protection Fast, Simple, and Agentless Deduplicated Virtual Machi ...