如何使用adb端口转发?

3
我正在为Android Studio创建一个调试插件,它会启动一个服务器并监听一个端口。设备(配有正在运行的adb守护进程的手机)通过USB连接。
我的应用程序将发送一些文件、请求、日志数据到一个端口。这是我的概念。
所以我想通过USB发送它。在一些挖掘后,我发现ADB端口转发/反向是答案。但是我没有理解使用adb进行端口转发的整个概念。
以下是需要翻译的问题:
1. 我是否需要在开发机和移动设备上都启动ServerSocket?
2. 如果是这样, 我已经在端口8080上启动了ServerSocket, 并且在设备端口9090上启动了ServerSocket, 然后执行adb forward tcp:8080 tcp:9090将被重定向到正在开发的计算机上的8080
3. 它们如何将流量转发或重定向到计算机端口?
4. 如何从Java代码中执行adb命令?
最终目标是我想与我的应用程序/库从手机通信到开发机器。
我对网络和这种事情一窍不通。感谢您的帮助。
1个回答

3
我建议您阅读并遵循教程中的步骤。在我编写一个可用于PC游戏的android游戏控制器时,这个教程确实帮了我大忙,其中android应用程序通过USB(使用adb)向PC发送输入信号。

  1. 我需要在开发机和手机上启动ServerSocket吗?

不需要,在一侧打开ServerSocket就可以了(对我而言,在android设备上开启ServerSocket并使用PC端的客户端套接字连接是完美的。

  1. 如果需要,在端口8080启动ServerSocket,设备的ServerSocket则在9090上启动,那么执行adb forward tcp:8080 tcp:9090将被转移到在开发机上的8080端口是否可以行得通?

不知道在开发机上开启ServerSocket是否适用于您,但当我使用adb时它对我无效。请确保按照以下步骤进行操作:

a. 在一侧打开ServerSocket并侦听连接(ServerSocker.accept()),比如端口号38100

b. 从开发机执行adb命令forward tcp:38300 tcp:38100

c. 然后在客户端调用socket = new Socket("localhost", 38300);

d. 传输数据

  1. 如何从Java代码中执行adb命令?

使用Java Runtime类。

String adbPath = "C:\\android-sdk-windows\\tools\\adb.exe";
Runtime.getRuntime().exec(adbPath + " forward tcp:38300 tcp:38100");

请查看如何在Java中执行外部程序的问题。


5
谢谢您的回复。如果您使用“反向”端口转发,移动设备上的客户端套接字将能够工作。adb reverse tcp:38300 tcp:38100 - noobEinstien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接