(转)C#与Android通过adb实现usb通讯
转自:http://blog.csdn.net/linweidong/article/details/6273507
需求:
Android的apk获取手机信息,把结果发给PC client
注意地方:
1.android默认手机端的IP为“127.0.0.1”
2.要想联通PC与android手机的sokcet,一定要用adb forward 来作下端口转发才能连上socket.
3.使用socket通信,需要在mainfest.xml中添加permission: android.permission.INTERNET
Runtime.getRuntime().exec("adb forward tcp:12580 tcp:10086");
Thread.sleep(3000);
Android作为服务import java.io.BufferedInputStream;import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket; public class TcpConnect implements Runnable{
private final int SERVER_PORT = 10086;
private ServerSocket mServerSocket;
private Socket mClient;
private String mDeviceId;
private String mDeviceType;
public TcpConnect(String aDeviceId, String aDeviceType){
this.mDeviceId= aDeviceId;
this.mDeviceType = aDeviceType;
try {
String ip = InetAddress.getLocalHost().getHostAddress();
System.out.println("ip地址是: " + ip);
//System.out.println(aDeviceId + " 型号: " + aDeviceType);
mServerSocket = new ServerSocket(SERVER_PORT);
System.out.println("TcpConnect" + "建立Socket");
// listen(); } catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println("TcpConnect" + e.getMessage());
}
} public void listen(){
while(true){
try {
mClient = mServerSocket.accept();
// Log.e("TcpConnect", "在积极的监听");
} catch (IOException e) {
// TODO Auto-generated catch block
//e1.printStackTrace();
System.out.println("TcpConnect" + e.getMessage());
}
} } @Override
public void run() {
// TODO Auto-generated method stub
// if(mClient.isConnected()){
BufferedOutputStream out = null;
System.out.println("TcpConnect" + "开始监听");
while(true){
try{
// Log.e("TcpConnect", "开始监听");
mClient = mServerSocket.accept();
// if(mClient.isConnected()){
System.out.println("TcpConnect" + "检测到有连接");
out = new BufferedOutputStream(mClient.getOutputStream());
String recordStr = mDeviceId + "|" + mDeviceType;
out.write(recordStr.getBytes("utf-8"));
// int length = recordStr.getBytes().length;
// byte[] b = recordStr.getBytes();
// out.writeInt(length);
// out.write(b);
out.flush();
// Log.e("TcpConnect", recordStr);
// out.flush();
// }
} catch(Exception e){
System.out.println("TcpConnect" + e.getMessage()); }finally{
if(out != null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("TcpConnect" + e.getMessage());
} }
if(mServerSocket != null){
try {
mServerSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("TcpConnect" + e.getMessage());
}
}
// }
} }
} public static void main(String[] args){
new Thread(new TcpConnect("2366578546946", "T959")).start();
} }
C#作为客户端,在客户端进行绑定端口:
Process p = new Process(); //实例一个Process类,启动一个独立进程
p.StartInfo.FileName = "cmd.exe"; //设定程序名
p.StartInfo.UseShellExecute = false; //关闭Shell的使用
p.StartInfo.RedirectStandardInput = true; //重定向标准输入
p.StartInfo.RedirectStandardOutput = true; //重定向标准输出
p.StartInfo.RedirectStandardError = true; //重定向错误输出
p.StartInfo.CreateNoWindow = true; // 设置不显示窗口
p.StartInfo.ErrorDialog = false;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
p.StandardInput.WriteLine(@"adb forward tcp:12580 tcp:10086"); // Thread.Sleep(3000);
SocketClient client = new SocketClient();
MessageBox.Show("收到的数据为: " + client.listen());
C#的Socket客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets; namespace PreInstaller.IO
{
class SocketClient
{ public string listen()
{
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress myIP = IPAddress.Parse("127.0.0.1");
IPEndPoint EPhost = new IPEndPoint(myIP, int.Parse(""));
client.Connect(EPhost);
byte[] t_data = new byte[];
string data = null;
int i = ;
while ((i = client.Receive(t_data)) != )
{
data = Encoding.UTF8.GetString(t_data, , i); }
client.Close();
return data;
}
}
}
(转)C#与Android通过adb实现usb通讯的更多相关文章
- Android - 设置adb的usb连接配置
设置adb的usb连接配置 本文地址: http://blog.csdn.net/caroline_wendy 把须要測试的手机连接入电脑.通过系统查找USB连接配置,找到厂商ID: 把ID加入进ad ...
- Android 工具-adb
Android 工具-adb 版权声明:本文为博主原创文章,未经博主允许不得转载. Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的. Android D ...
- Android 神兵利器—— Adb 常用命令
总结的Android工具类文章: Android 神兵利器-- Adb 常用命令 Android 神兵利器-- Git 常用命令 Adb的全称为Android Debug Bridge,是管理andr ...
- Linux下安装Android的adb驱动-解决不能识别的问题
Linux下安装Android的adb驱动-解决不能识别的问题 20141011更新: 老方法对我当时使用的一款设备一直都没有出现问题,最后遇到小米手机还有Android4.4版本的系统都会 ...
- 【Android】adb connect 手机的两种方式
adb支持两种连接Android系统的方式,USB方式及网络方式.一般android手机及android平板默认会设置为USB方式(直接插数据线的方式). 下边介绍两种方式的切换方式. 1. 背景知识 ...
- Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息
Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息 by:授客 QQ:1033553122 1. 查看内存信息 1)查看所有内存信息 命令: dumpsys mem ...
- Android 查看 无wifi/usb设备的logcat方法
Android 查看 无wifi/usb设备的logcat方法 一.情况 一个定制Android设备,wifi被去掉.我须要调试一个USB设备这样也无法用usb来输出logcat. 由于这个USB设备 ...
- [RN] Android 设备adb连接后unauthorized解决方法
Android 设备adb连接后unauthorized解决方法 安卓设备usb或者adbwireless连接后输入adb device后都是未授权状态 相信很多同学都会遇到这种情况,除了一直重复开关 ...
- [原创]Android 常用adb命令总结
[原创]Android 常用adb命令总结 1 adb介绍 1.1 adb官方网站及下载 官方网站下载安装:http://adbshell.com/downloads 1.2 adb安装是否成功检查? ...
随机推荐
- Java基础知识强化101:Java 中的 String对象真的不可变吗 ?
1. 什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对 ...
- myeclipse web 包名保留字与servlet冲突
包名不能取modify ..........等保留字 不能有数字
- Source Insight新建工程文件
options->document options ->document type ->c source file 下 //添加 “.S”结尾的汇编语言支持 project -& ...
- 关于相对路径和绝对路径及cd命令的使用
cd (change directory) 目录 跳转到指定目录下 路径定义分为两种:绝对路径(absolute)和相对路径(relative) 绝对路径:从根目录(/)开始写去的文件名或目录名 ...
- 伸展树 Splay Tree
Splay Tree 是二叉查找树的一种,它与平衡二叉树.红黑树不同的是,Splay Tree从不强制地保持自身的平衡,每当查找到某个节点n的时候,在返回节点n的同时,Splay Tree会将节点n旋 ...
- sqlserver和oracle中对全半角的转换
oracle中对全半角的转换 to_single_byte(c)转换成半角 to_multi_byte(c)转换成全角 SELECT To_single_byte('881898?71') FROM ...
- 编程计算int类型整数的最大值和最小值
方法一:将一个int类型整数不断加1,加到最大值,再加1,就变成负值(最小值) 最大值就是除最高位外,其余位都为1,-1即是所有位全部是1,右移1位后最高位变0 最小值即是最高位为1,其余位为0, ...
- java的回忆录
封装的三步骤:(1)加属性(成员变量.全局变量.域field)用private来修饰(2)为对应的属性生成共有的setter.getter方法(3)在对应的setter的方法中可以根据需要加入对应的验 ...
- web服务器顺带网络负载均衡
Web服务器配置共享文件 文件服务器需要做的 1. 建立共享文件夹,并建立两个子文件夹 2. 创建用户以便访问共享时使用此凭据 3. 共享并给予刚创建的用户读取和写入权限 Web服务器的设置 1. 新 ...
- 【转载】 c语言inline函数的使用
c语言inline函数的使用 转载自:http://blog.chinaunix.net/uid-21843265-id-3056446.html 大学在教科书上学习过inline函数,定义为inli ...