浅析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回调函数执行.

 

在手机端
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].


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值