安卓设备通过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"));
上一篇:
IDEA上Java项目控制台中文乱码