博客
关于我
ADB forward Android与PC进行Scokct通信
阅读量:178 次
发布时间:2019-02-28

本文共 5458 字,大约阅读时间需要 18 分钟。

ADB forward Android与PC进行Socket通信

ADB(Android Debug Bridge)是一种强大的工具,用于连接Android设备并执行多种操作,如调试应用程序或进行文件传输。本文将介绍如何通过ADB实现Android与PC之间的Socket通信。

ADB的“forward”命令允许数据通过特定的端口转发。例如,使用命令“adb forward tcp:8000 tcp:9000”可将本机8000端口的数据转发至手机9000端口。理解TCP协议的基础知识有助于更好地掌握这一过程。

Android客户端代码

在Android Studio中创建新项目,并添加必要的权限:

创建服务端线程:

import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class ServerThread extends Thread {    private ServerSocket serverSocket;    private Socket socket;    public Socket getSocket() {        return socket;    }    @Override    public void run() {        try {            serverSocket = new ServerSocket(9000);            Log.e("tip", "*等待建立连接*");            socket = serverSocket.accept();            Log.e("tip", "*已经建立连接*");            startReader(socket);        } catch (IOException e) {            e.printStackTrace();        }    }    private void startReader(final Socket socket) {        while (true) {            String receiveMsg = "";            try {                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));                if ((receiveMsg = bufferedReader.readLine()) != null) {                    System.out.println("获取到客户端的信息:" + receiveMsg);                    Log.e("msg from client", receiveMsg);                    OutputStream out = socket.getOutputStream();                    receiveMsg += " from server\n";                    out.write(receiveMsg.getBytes());                    out.flush();                    Log.e("write back", receiveMsg);                } else {                    Log.e("tip", "no new msg");                }            } catch (IOException e) {                e.printStackTrace();            }        }    }}

MainActivity中启动线程:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        new Thread(new ServerThread()).start();    }}

JAVA客户端代码

创建客户端类:

package com.example.test;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ClientApp {    static Socket socket = null;    private static boolean mRunning = false;    public static void main(String[] args) {        startClient();    }    private static void startClient() {        try {            socket = new Socket("127.0.0.1", 8000);            mRunning = true;            new Thread(new InThread(socket)).start();            new Thread(new OutThread(socket)).start();        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    static class InThread implements Runnable {        Socket socket = null;        public InThread(Socket s) {            socket = s;        }        @Override        public void run() {            while (mRunning) {                if (socket.isClosed()) {                    mRunning = false;                    break;                }                InputStream in = null;                try {                    in = socket.getInputStream();                } catch (IOException e1) {                    e1.printStackTrace();                }                InputStreamReader reader = new InputStreamReader(in);                try {                    char[] buf = new char[1024];                    int cnt = reader.read(buf);                    if (cnt > 0) {                        String msg = new String(buf, 0, cnt);                        System.out.println(msg);                    }                } catch (IOException e) {                    String error = e.getMessage();                    if (!error.equalsIgnoreCase("Socket closed")) {                        e.printStackTrace();                    }                }            }        }    }    static class OutThread implements Runnable {        Socket socket = null;        public OutThread(Socket s) {            socket = s;        }        @Override        public void run() {            while (mRunning) {                if (socket.isClosed()) {                    mRunning = false;                    break;                }                OutputStream out = null;                try {                    out = socket.getOutputStream();                } catch (IOException e2) {                    e2.printStackTrace();                }                try {                    System.out.println("prepare to send data to server");                    out.write("hello server\n".getBytes());                    out.flush();                } catch (IOException e) {                    e.printStackTrace();                }                try {                    Thread.sleep(2000);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }}

执行步骤

  • 在命令行运行:
    adb forward tcp:8000 tcp:9000
  • 运行Android服务端应用程序。
  • 运行JAVA客户端应用程序。
  • 结果

    通过以上步骤,您应能看到Android客户端接收到来自JAVA客户端的消息,并发送反馈信息。日志输出将帮助您跟踪和调试过程中出现的问题。

    扩展

    • ADB连接方式:可以选择通过USB或网络连接,网络连接可通过“adb connect ip:port”实现。
    • 数据转发:使用“adb forward”命令可实现不同端口之间的数据转发。
    • 模拟器支持:确保模拟器已连接并设置正确的网络环境。

    通过以上方法,您可以实现Android与PC之间的Socket通信,适用于各种数据传输需求。

    转载地址:http://ybmc.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现BloomFilter布隆过滤器的算法(附完整源码)
    查看>>
    Objective-C实现BMP图像旋转180度(附完整源码)
    查看>>
    Objective-C实现bogo sort排序算法(附完整源码)
    查看>>
    Objective-C实现boruvka博鲁夫卡算法(附完整源码)
    查看>>
    Objective-C实现Boyer-Moore字符串搜索算法(附完整源码)
    查看>>
    Objective-C实现BP误差逆传播算法(附完整源码)
    查看>>
    Objective-C实现breadth First Search广度优先搜索算法(附完整源码))
    查看>>
    Objective-C实现BreadthFirstSearch广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现BreadthFirstShortestPath广度优先最短路径算法(附完整源码)
    查看>>
    Objective-C实现bubble sort冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现bucket sort桶排序算法(附完整源码)
    查看>>
    Objective-C实现Burke 抖动算法(附完整源码)
    查看>>
    Objective-C实现Burrows-Wheeler 算法(附完整源码)
    查看>>
    Objective-C实现CaesarsCiphe凯撒密码算法(附完整源码)
    查看>>
    Objective-C实现calloc函数功能(附完整源码)
    查看>>
    Objective-C实现canny边缘检测算法(附完整源码)
    查看>>
    Objective-C实现cartesianProduct笛卡尔乘积算法(附完整源码)
    查看>>
    Objective-C实现check strong password检查密码强度算法(附完整源码)
    查看>>
    Objective-C实现chudnovsky algorithm楚德诺夫斯基算法(附完整源码)
    查看>>
    Objective-C实现CIC滤波器(附完整源码)
    查看>>