安卓设备通过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项目控制台中文乱码
