转自: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通讯的更多相关文章

  1. Android - 设置adb的usb连接配置

    设置adb的usb连接配置 本文地址: http://blog.csdn.net/caroline_wendy 把须要測试的手机连接入电脑.通过系统查找USB连接配置,找到厂商ID: 把ID加入进ad ...

  2. Android 工具-adb

    Android 工具-adb 版权声明:本文为博主原创文章,未经博主允许不得转载. Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的. Android D ...

  3. Android 神兵利器—— Adb 常用命令

    总结的Android工具类文章: Android 神兵利器-- Adb 常用命令 Android 神兵利器-- Git 常用命令 Adb的全称为Android Debug Bridge,是管理andr ...

  4. Linux下安装Android的adb驱动-解决不能识别的问题

    Linux下安装Android的adb驱动-解决不能识别的问题 20141011更新:      老方法对我当时使用的一款设备一直都没有出现问题,最后遇到小米手机还有Android4.4版本的系统都会 ...

  5. 【Android】adb connect 手机的两种方式

    adb支持两种连接Android系统的方式,USB方式及网络方式.一般android手机及android平板默认会设置为USB方式(直接插数据线的方式). 下边介绍两种方式的切换方式. 1. 背景知识 ...

  6. Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息

    Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息   by:授客 QQ:1033553122 1.  查看内存信息 1)查看所有内存信息 命令: dumpsys mem ...

  7. Android 查看 无wifi/usb设备的logcat方法

    Android 查看 无wifi/usb设备的logcat方法 一.情况 一个定制Android设备,wifi被去掉.我须要调试一个USB设备这样也无法用usb来输出logcat. 由于这个USB设备 ...

  8. [RN] Android 设备adb连接后unauthorized解决方法

    Android 设备adb连接后unauthorized解决方法 安卓设备usb或者adbwireless连接后输入adb device后都是未授权状态 相信很多同学都会遇到这种情况,除了一直重复开关 ...

  9. [原创]Android 常用adb命令总结

    [原创]Android 常用adb命令总结 1 adb介绍 1.1 adb官方网站及下载 官方网站下载安装:http://adbshell.com/downloads 1.2 adb安装是否成功检查? ...

随机推荐

  1. Java基础知识强化101:Java 中的 String对象真的不可变吗 ?

    1. 什么是不可变对象?       众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对 ...

  2. myeclipse web 包名保留字与servlet冲突

    包名不能取modify ..........等保留字 不能有数字

  3. Source Insight新建工程文件

    options->document options ->document type ->c source file 下 //添加 “.S”结尾的汇编语言支持   project -& ...

  4. 关于相对路径和绝对路径及cd命令的使用

    cd (change directory) 目录    跳转到指定目录下 路径定义分为两种:绝对路径(absolute)和相对路径(relative) 绝对路径:从根目录(/)开始写去的文件名或目录名 ...

  5. 伸展树 Splay Tree

    Splay Tree 是二叉查找树的一种,它与平衡二叉树.红黑树不同的是,Splay Tree从不强制地保持自身的平衡,每当查找到某个节点n的时候,在返回节点n的同时,Splay Tree会将节点n旋 ...

  6. sqlserver和oracle中对全半角的转换

    oracle中对全半角的转换 to_single_byte(c)转换成半角 to_multi_byte(c)转换成全角 SELECT To_single_byte('881898?71') FROM ...

  7. 编程计算int类型整数的最大值和最小值

    方法一:将一个int类型整数不断加1,加到最大值,再加1,就变成负值(最小值) 最大值就是除最高位外,其余位都为1,-1即是所有位全部是1,右移1位后最高位变0   最小值即是最高位为1,其余位为0, ...

  8. java的回忆录

    封装的三步骤:(1)加属性(成员变量.全局变量.域field)用private来修饰(2)为对应的属性生成共有的setter.getter方法(3)在对应的setter的方法中可以根据需要加入对应的验 ...

  9. web服务器顺带网络负载均衡

    Web服务器配置共享文件 文件服务器需要做的 1. 建立共享文件夹,并建立两个子文件夹 2. 创建用户以便访问共享时使用此凭据 3. 共享并给予刚创建的用户读取和写入权限 Web服务器的设置 1. 新 ...

  10. 【转载】 c语言inline函数的使用

    c语言inline函数的使用 转载自:http://blog.chinaunix.net/uid-21843265-id-3056446.html 大学在教科书上学习过inline函数,定义为inli ...