安卓设备通过USB接口实现与pc端的简单数据通信

安卓设备通过USB接口实现与pc端的简单数据通信

最近突发奇想,想实现手机和电脑的交互,但考虑到网络限制,想要基于USB数据线实现与pc的通信,查阅很多资料,最终初步实现。以下某些思路来源于网络,大部分是自己写的,自我总结一番。

实现思路:

    通过adb命令转接端口 安卓客户端作为Server,监听socket请求 pc端为client,请求socket连接

PC端代码:

Android端代码:

package com.example.cjh.news.ADB;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.example.cjh.news.R;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Main2Activity extends AppCompatActivity {
          
   

    private static final String TAG = "ServerThread";

    private TextView textView ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        textView = (TextView) findViewById(R.id.text1);

        new ServerThread().start();

    }

    class ServerThread extends Thread {



        @Override
        public void run() {
            Log.d(TAG, "running");

            ServerSocket serverSocket = null;
            try {
                serverSocket = new ServerSocket(2580);
                Log.d("TAG", "等待连接");
                while (true) {
                    Socket client = serverSocket.accept();

                    // 接受客户端信息
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(client.getInputStream()));

                    // 发送给客户端的消息
                    PrintWriter out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(client.getOutputStream())),true);

                    final String msg = in.readLine();
                    Log.d(TAG,"msg = "+msg);

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(msg);
                        }
                    });

                    out.println("Server say:"+msg);
                    out.flush();
                    Log.d(TAG, "accept");

                    client.close();
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                Log.d(TAG, "destory");

                if (serverSocket != null) {
                    try {
                        serverSocket.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

}

注:

第一次测试的时候出现了乱码,原因是安卓端和pc端的编码方式不同,只要在传输过程中统一编码方式即可。

// 将信息通过这个对象来发送给Server
PrintWriter out = new PrintWriter(new BufferedWriter(
    new OutputStreamWriter(socket.getOutputStream(),"utf-8")),true);

// 接收服务器信息
BufferedReader in = new BufferedReader(
    new InputStreamReader(socket.getInputStream(),"utf-8"));
经验分享 程序员 微信小程序 职场和发展