Android adb的一个命令 : adb forward,该命令转发PC电脑上的端口数据到Android设备的一个端口。
adb forward tcp:18000 tcp:19000
上面的命令,即把PC电脑端TCP端口18000的数据转发到与电脑通过adb连接的Android设备的TCP端口19000上。换言之,假设现在PC端在端口18000绑定,并在该端口读写数据,将会被转发到Android设备端的19000。
写一个例子,假设现在PC端作为客户端,用Java普通Socket写一个客户端绑定端口18000,并在这个端口写入和读取数据,然后Android作为服务器端绑定端口19000,等待客户端连接。服务器端与客户端建立连接后,两者进行数据的IO。
客户端(PC):
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
public class SocketTest {
private ScheduledThreadPoolExecutor mScheduledThreadPoolExecutor = null;
private Runnable mRunnable = null;
private ScheduledFuture<?> mScheduledFuture = null;
private Socket mSocket = null;
private Logger mLogger = Logger.getLogger(SocketTest.class.getName());
private void session() {
DataInputStream dis = null;
DataOutputStream dos = null;
try {
dis = new DataInputStream(mSocket.getInputStream());
dos = new DataOutputStream(mSocket.getOutputStream());
while (true) {
String data = "PC时间:" + System.currentTimeMillis();
dos.writeUTF(data);
dos.flush();
String s = dis.readUTF();
mLogger.info("收到数据:" + s);
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
mSocket.close();
} catch (Exception e) {
e.printStackTrace();
mSocket = null;
public SocketTest() {
mScheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
mRunnable = new Runnable() {
@Override
public void run() {
if (mSocket == null || !mSocket.isConnected()) {
mLogger.info("尝试建立连接...");
try {
mSocket = new Socket("localhost", 18000);
mLogger.info("建立新连接:" + mSocket.toString());
CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
session();
} catch (Exception e) {
mLogger.info("连接异常");
} else {
mLogger.info("连接心跳检测:当前已经建立连接,无需重连");
// 每隔3秒周期性的执行心跳检测动作。
mScheduledFuture = mScheduledThreadPoolExecutor.scheduleAtFixedRate(mRunnable, 0, 3, TimeUnit.SECONDS);
public static void main(String[] args) {
new SocketTest();
服务器端(Android):
package zhangphil.socket;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private String TAG = "Android端";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new ServerThread().start();
private class ServerThread extends Thread {
@Override
public void run() {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(19000);
while (true) {
Socket socket = serverSocket.accept();
Log.d(TAG, "接受连接");
new ClientThread(socket).start();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
private class ClientThread extends Thread {
private Socket socket;
public ClientThread(Socket socket) {
this.socket = socket;
Log.d(TAG, "当前Socket:" + socket.toString());
@Override
public void run() {
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
while (true) {
String data = dis.readUTF();
Log.d(TAG, "收到数据:" + data);
//回写给客户端。
String s = "手机时间:" + System.currentTimeMillis();
dos.writeUTF(s);
dos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (Exception e) {
e.printStackTrace();
adb forward是市面上流行的xx手机助手的底层关键技术。注意,当手机端在反复切换USB连接模式(充电,传输文件等模式),会导致adb断开,进而直接导致上层的Socket连接失败。每次USB连接模式改变后,需要重新使用adb forward命令:
adb forward tcp:18000 tcp:19000
同时要保证手机处于开发者模式,且已打开debug调试模式。
Android adb的一个命令 : adb forward,该命令转发PC电脑上的端口数据到Android设备的一个端口。adb forward tcp:18000 tcp:19000上面的命令,即把PC电脑端TCP端口18000的数据转发到与电脑通过adb连接的Android设备的TCP端口19000上。换言之,假设现在PC端在端口18000绑定,并在该端口读写数据,将会被转发到An...
做了Android开发这么久了,经常会遇到一个问题是adb端口被占用,大家都知道Android默认的adb端口是5037,电脑上有一些应用的端口,又恰巧与adb端口冲突占用掉了
早起本人的做法的是:
查看端口是否被占用:运行:netstat -ano | findstr “5037” 或者(查看多有端口netstat -ano)
C:\Users\chen>netstat -aon|findstr 5037
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 3676
通过PID查看所有进程
C:\Users\chen>tasklist /fi “PID eq 36
FWD:端口转发应用
Fwd:端口转发应用程序可让您使用Android设备的网络接口通过栓系连接转发端口,非常适合托管服务器或打开NAT类型进行游戏。 Fwd旨在促进从Android设备轻松便捷地进行端口转发。
对于对端口转发感兴趣的网络爱好者和专业人士来说,它是必不可少的。 将手机用作热点(网络共享)时,此应用程序可让您将Android设备用作网络服务器,媒体服务器或游戏服务器(仅举几例)的网关。
创建和删除端口转发规则。
通过TCP,UDP或同时通过两者转发端口。
从设备上的每个可用网络适配器转发。
方便使用的
轻松删除所有现有规则,然后重新开始。
通过功能齐全的支持页面获取帮助。
额外的信息
在上快速了解该应用程序
Fwd:端口转发应用程序是完全免费和开源的。 如果您认为该应用程序有用,请考虑捐赠以支持持续的开发。 您的捐款将帮助我们改善应用程序并继续提供支持:)
为了支持发展,请
反馈与支持
一如既往,评论和批评比任何时候都受到鼓励,我们喜欢听到大家的反馈! 如果您需要任何帮助,请随时访问我们的或通过与我们联系。
adb forward的细节(1):概述
本系列文章从adb forward tcp:11111 tcp:22222说起,介绍adb forward的一些细节,包括adb forward的相关代码,adb forward在drozer上的使用,以及如何利用adb forward开发一个PC端和手机端通信的工具。
本文是本系列文章中的第一篇,介绍adb forward的大致原理,目的是看完这篇之...
使用 adb forward 打造一个通过USB连接建立的PC端与手机端交互的工具,类似于银行里的服务评价器,由PC端发出指令,在手机端(或终端)接收指令并显示页面。
1、 adb forward 原理概述
adb forward 的功能是建立一个转发
如:adb forward tcp:8000 tcp:9000 的意思是,将PC端的 8000 端口收到的数据,转发给手机中的 9000 ...
adb logcat -s FastJsonRequest :显示指定标记的log
adb logcat -c : 清楚日志的缓存
adb logcat | grep WIFI 管道过滤,每行包含指定信息时打印
adb logcat | grep -i WIFI 过滤时忽略大小写
adb logcat | grep "E...
曾经以为adb forward是个好东东,因为通过这个映射之后,在PC和设备之间就可以直接socket通信了。可现在终于发现,世界不是完美的。
Android Debug Bridge设计的目的,一是用来管理所有连接的设备;二是提供各种服务,供PC端有效的控制设备。主要包括三个部分:
1) ADB-server
运行在PC端,是一个始终在后台运行的进程,作为与手机端交互的唯一接口
当Android 设备本地在 127.0.0.1:6100/xx.m3u8端口实现代理播放时,通过设置forward,可以在PC的 127.0.0.1:7100/xx.m3u8端口同时访问到Android这个内容。
(当然端口可以都设置为 6100 ,这样PC可以访问 Android 一样的url获取播放内容)
曾经以为adb forward是个好东东,因为通过这个映射之后,在PC和设备之间就可以直接socket通信了。可现在终于发现,世界不是完美的。Android Debug Bridge设计的目的,一是用来管理所有连接的设备;二是提供各种服务,供PC端有效的控制设备。主要包括三个部分:1) ADB-server运
行在PC端,是一个始终在后台运行的进程,作为与手机端交互的唯一接口。ADB-server
Android开发中我们有时候需要借助一些命令帮助更好的高效率定位解决问题,本文就来介绍一些可能有些隐藏的而却非常好用的命令,可以帮我们快速找到问题,这些命令都是本人在开发中实践总结,个人觉得非常实用,所以可能对于你不是很有用,但是了解也是很好的,而Android中的命令很多的,有些个人觉得没多大用就不在这里提了,好了,下面就开始命令的分析总结。
文章目录**前言****基础命令****常用...
在使用 `adb forward` 命令时,如果出现了端口丢包的情况,可以尝试以下几种解决方法:
1. 检查网络环境:丢包可能是因为网络环境不稳定所致,可以尝试使用其他网络环境进行测试,比如更换网络连接方式,或者尝试连接到不同的 Wi-Fi 网络。
2. 增加缓冲区大小:可以尝试增加缓冲区的大小,来减少丢包的可能性。可以通过 `adb forward` 命令的 `-t` 选项设置 TCP 缓冲区大小,例如:`adb forward tcp:8080 tcp:8080 -t 16384`。
3. 降低传输速度:如果缓冲区大小的设置并没有解决问题,可以尝试降低传输速度来减少丢包。可以通过 `-r` 选项降低数据传输速度,例如:`adb forward tcp:8080 tcp:8080 -r 1024`。
4. 使用其他端口:如果上述方法仍无法解决问题,可以尝试使用其他端口,或者将本地端口和设备端口进行互换。例如,将 `adb forward tcp:8080 tcp:8080` 修改为 `adb forward tcp:8080 tcp:8081`。
5. 升级 ADB 版本:如果以上方法仍然无法解决问题,可以尝试升级 ADB 版本,或者尝试使用其他的 ADB 工具进行连接。
Elasticsearch报错: received plaintext http traffic on an https channel, closing connection ...
bongye:
Unable to make field private final java.lang.String java.io.File.path accessible: module java.base d
一枚学渣斗学霸:
Android PagerSnapHelper改造RecyclerView为ViewPage,kotlin
CSDN-Ada助手:
我写的《高性能Android开发技术》一书已正式出版全国发行
微软安全技术分享:
Android自定义ProgressBar样式:渐变圆角水平进度条
吴Sir.: