Android与PC通过USB连接通信(一)
Android与PC通过USB连接通信(一)
原理
通过在Android设备与PC之间通过USB建立socket连接,以Android作为服务器,PC作为客户端,通过adb进行转发通信。
客户端代码及分析
package com.geo.main;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import com.geo.util.FileHelper;
import com.geo.util.MyUtil;/*** usb与pc通信,通过adb端口转发方式*/
public class testPcClient
{public static void main(String[] args) throws InterruptedIOException{try{// adb 指令,在服务器开启后建立连接Runtime.getRuntime().exec("adb shell am broadcast -a NotifyServiceStop");Thread.sleep(3000);Runtime.getRuntime().exec("adb forward tcp:12580 tcp:10086"); // 端口转换Thread.sleep(3000);Runtime.getRuntime().exec("adb shell am broadcast -a NotifyServiceStart");Thread.sleep(3000);} catch (Exception e){e.printStackTrace();}Socket socket = null;try{/*建立socket连接*/InetAddress serveraddr = null;serveraddr = InetAddress.getByName("127.0.0.1");System.out.println("TCP C: Connecting...");socket = new Socket(serveraddr, 12580);String str = "hi,chenhl";System.out.println("TCP C: RECEIVE");BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());BufferedInputStream in = new BufferedInputStream(socket.getInputStream());BufferedReader br = new BufferedReader(new InputStreamReader(System.in));boolean flag = true;while (flag){System.out.print("请输入file传递文件,退出输入exit:");String strWord = br.readLine();// if (strWord.equals("file")){/* 发送命令,out为发送给服务器的命令*/out.write("file".getBytes());out.flush();System.out.println("send file finish sending the CMD:");/* 服务器反馈准备接受,in为服务器的反馈 */String strFormsocket = readFromSocket(in);System.out.println("service ready receice data:UPDATE_CONTACTS:" + strFormsocket);byte[] filebytes = FileHelper.readFile("test1.txt");/*FileHelper为一个class,readFile将此处的test1.txt内容读取为byte[]格式test1.txt文件路径在FileHelper内设置*/System.out.println("fileszie = " + filebytes.length);/* MyUtil将整数转换为4字节byte数组 */byte[] filelength = new byte[4];filelength = MyUtil.intToByte(filebytes.length);byte[] fileformat = null;fileformat = ".png".getBytes();System.out.println("fileformat length=" + fileformat.length);/* 字节流中前4字节为文件长度,4字节文件格式,以后是文件流 *//* 注意如果write里的byte[]超过socket的缓存,系统会自动分包写过去,所以对方要循环写完 *//*一些文件属性的输出*/out.write(filelength);out.flush();String strok1 = readFromSocket(in);System.out.println("service receive filelength :" + strok1);System.out.println("write data to android");out.write(filebytes);out.flush();System.out.println("*********");/* 服务器反馈:接收成功 */String strread = readFromSocket(in);System.out.println(" send data success:" + strread);System.out.println("=============================================");} else if (strWord.equalsIgnoreCase("EXIT")){out.write("EXIT".getBytes());out.flush();System.out.println("EXIT finish sending the data");String strFormsocket = readFromSocket(in);System.out.println("the data sent by server is:/r/n" + strFormsocket);flag = false;System.out.println("=============================================");}}} catch (UnknownHostException e1){System.out.println("TCP ERROR1:" + e1.toString());} catch (Exception e2){System.out.println("TCP ERROR2:" + e2.toString());} finally{try{if (socket != null){socket.close();System.out.println("socket.close()");}} catch (IOException e){System.out.println("TCP ERROR3:" + e.toString());}}}/* 从inputestream流中读数据*/public static String readFromSocket(InputStream in){int MAX_BUFFER_BYTES = 4000;String msg = "";byte[] tempbuffer = new byte[MAX_BUFFER_BYTES];try{int numReadedBytes = in.read(tempbuffer, 0, tempbuffer.length);msg = new String(tempbuffer, 0, numReadedBytes, "utf-8");tempbuffer = null;} catch (Exception e){e.printStackTrace();}return msg;}
}
分析及总结
此段代码为PC端的客户端代码,直接在PC端进行运行,在控制台输入指令,通过socket连接以adb指令的USB转发来传递数据,但是需要android设备首先开启服务端才能成功建立socket,全程需要将PC与android设备进行USB连接。
Android与PC通过USB连接通信(一)相关推荐
- Android硬件控制之USB连接
简介 在Android实现USB连接有什么作用?USB连接有什么限制?USB连接实现的难度? 1.Android实现USB连接有什么作用? 在Android上实现USB连接的用处在于可以在搭载Andr ...
- WIFI 安卓Android系统手机通过USB连接电脑上网
呵呵,wifi = 无线局域网 Wi-Fi是一种可以将个人电脑.手持设备(如PDA.手机)等终端以无线方式互相连接的技术. Wi-Fi是一个无线网路通信技术的品牌,由Wi-Fi联盟(Wi-Fi All ...
- android 蓝牙搜索、配对连接通信总结
蓝牙协议可以实现一个蓝牙设备和6到8个蓝牙设备进行通信. 1.蓝牙搜索的实现 利用蓝牙的发现和完成动作动态注册广播接受者获得蓝牙设备. 第一步,获得蓝牙适配器 BluetoothAdapter mBt ...
- 实现Android和PC之间的蓝牙通信
这两天想实现PC和安卓手机的通信,限于水平,知道的方法大概有两种:基于数据包的socket和蓝牙.虽然看起来简单,但调也调了两天多.自己测试了下socket,在室内WIFI环境下时延大概是0.1s.而 ...
- android 语音通信,Android与PC间的语音通信
主要问题是语音格式的编码解码. Android端使用android.media包,AudioRecord获取由麦克风采样的语音,格式为: private final static int Sample ...
- App自动化测试通过USB连接和无线连接Android终端设备的方法(adb远程连接)
1.通过USB线连接Android终端设备 1.准备: 1.1.确保电脑的USB端口能够识别手机,(电脑可以安装对应手机的USB驱动) win10自动可以识别. 1.2.确保电脑上不要装带有adb工具 ...
- 物联网模块ESP8266-01S实现PC端和Android APP同时连接通信
本设计实现了PC端和Android APP与物联网模块ESP8266-01S通信. 1,Android APP采用E4A编写,PC端使用TCP调试助手. 首先最关键的需要对ESP8266-01S物联网 ...
- 如何通过USB将Android连接到PC的Internet连接
People often "tether" their computers to their smartphones, sending their computer's netwo ...
- android与pc的连接
本篇总结android通过ssh连接到电脑linux系统,以及电脑连接到android的shell.目的是 整理相关工具方便今后使用 应用场景: 连接pc手机远程进入pc端工作连接android电脑w ...
最新文章
- windows10中 git 本地仓库的使用
- MAX Script 脚本语言
- 区分主机 cpu 计算机及计算机系统,小学计算机教案(二)
- 'parent.relativePath' points at no local POM
- python文件夹中的__init__.py的作用
- git将本地仓库推送到远程仓库
- Coolite服务端方法调用与Web.Config配置
- JavaSE基础之-Calendar时间类
- PHP学习路线图(2021年最新版)
- 机械硬盘换固态硬盘重装系统
- 使用cordova调用相机在相机中添加蒙版
- 扁平化设计-扁平化与拟物设计对比
- 团队作业6——展示博客(alpha阶段)
- 2022届浙江工业大学考研计算机技术专硕上岸经验 初试复试经验
- javascript当中onblur和onfocus用法
- Android 插件化原理(一),通过dex文件调用插件app代码
- 验证身份证是否真实有效
- 告别繁琐的重命名,教你快速重命名技巧
- 简单易懂的Json的使用教程(jackson/fastjson)
- libtorrent java_[libtorrent] windows搭建 libtorrent 开发环境