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连接通信(一)相关推荐

  1. Android硬件控制之USB连接

    简介 在Android实现USB连接有什么作用?USB连接有什么限制?USB连接实现的难度? 1.Android实现USB连接有什么作用? 在Android上实现USB连接的用处在于可以在搭载Andr ...

  2. WIFI 安卓Android系统手机通过USB连接电脑上网

    呵呵,wifi = 无线局域网 Wi-Fi是一种可以将个人电脑.手持设备(如PDA.手机)等终端以无线方式互相连接的技术. Wi-Fi是一个无线网路通信技术的品牌,由Wi-Fi联盟(Wi-Fi All ...

  3. android 蓝牙搜索、配对连接通信总结

    蓝牙协议可以实现一个蓝牙设备和6到8个蓝牙设备进行通信. 1.蓝牙搜索的实现 利用蓝牙的发现和完成动作动态注册广播接受者获得蓝牙设备. 第一步,获得蓝牙适配器 BluetoothAdapter mBt ...

  4. 实现Android和PC之间的蓝牙通信

    这两天想实现PC和安卓手机的通信,限于水平,知道的方法大概有两种:基于数据包的socket和蓝牙.虽然看起来简单,但调也调了两天多.自己测试了下socket,在室内WIFI环境下时延大概是0.1s.而 ...

  5. android 语音通信,Android与PC间的语音通信

    主要问题是语音格式的编码解码. Android端使用android.media包,AudioRecord获取由麦克风采样的语音,格式为: private final static int Sample ...

  6. App自动化测试通过USB连接和无线连接Android终端设备的方法(adb远程连接)

    1.通过USB线连接Android终端设备 1.准备: 1.1.确保电脑的USB端口能够识别手机,(电脑可以安装对应手机的USB驱动) win10自动可以识别. 1.2.确保电脑上不要装带有adb工具 ...

  7. 物联网模块ESP8266-01S实现PC端和Android APP同时连接通信

    本设计实现了PC端和Android APP与物联网模块ESP8266-01S通信. 1,Android APP采用E4A编写,PC端使用TCP调试助手. 首先最关键的需要对ESP8266-01S物联网 ...

  8. 如何通过USB将Android连接到PC的Internet连接

    People often "tether" their computers to their smartphones, sending their computer's netwo ...

  9. android与pc的连接

    本篇总结android通过ssh连接到电脑linux系统,以及电脑连接到android的shell.目的是 整理相关工具方便今后使用 应用场景: 连接pc手机远程进入pc端工作连接android电脑w ...

最新文章

  1. windows10中 git 本地仓库的使用
  2. MAX Script 脚本语言
  3. 区分主机 cpu 计算机及计算机系统,小学计算机教案(二)
  4. 'parent.relativePath' points at no local POM
  5. python文件夹中的__init__.py的作用
  6. git将本地仓库推送到远程仓库
  7. Coolite服务端方法调用与Web.Config配置
  8. JavaSE基础之-Calendar时间类
  9. PHP学习路线图(2021年最新版)
  10. 机械硬盘换固态硬盘重装系统
  11. 使用cordova调用相机在相机中添加蒙版
  12. 扁平化设计-扁平化与拟物设计对比
  13. 团队作业6——展示博客(alpha阶段)
  14. 2022届浙江工业大学考研计算机技术专硕上岸经验 初试复试经验
  15. javascript当中onblur和onfocus用法
  16. Android 插件化原理(一),通过dex文件调用插件app代码
  17. 验证身份证是否真实有效
  18. 告别繁琐的重命名,教你快速重命名技巧
  19. 简单易懂的Json的使用教程(jackson/fastjson)
  20. libtorrent java_[libtorrent] windows搭建 libtorrent 开发环境

热门文章

  1. Java字节码文件和二进制文件的区别与联系
  2. ubuntu中的apt终端命令解析
  3. RabbitMQ图文详解 | MQ_SpringAMQP | 系统性学习 | 无知的我费曼笔记
  4. stm32f407之基本定时器TIM6TIM7(操作寄存器)
  5. 手机Web开发框架 Mobl
  6. 想玩明白Hive哪有那么容易,十分钟你都看不完
  7. Qt案例1-extending-qml
  8. matlab图形网格线画虚线
  9. 高斯 默克托投影知识
  10. base64转图片,浏览器前面加