转自: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. struts2.1笔记07:Sturts.xml配置中的包介绍

    1. 2.这里上面namespace作用是介绍: (1)如果<package>配置在struts1中如下: (2)同样的配置在struts2中如下:

  2. swift基本数据类型的使用

    // // ViewController.swift // 基本数据类型 // // Created by 叶炯 on 16/9/8. // Copyright © 2016年 叶炯. All rig ...

  3. centos搭建本地库

    --2013年8月23日11:00:26环境:centos6.3(64bit)--场景默认情况下在用yum install 安装软件会从配置库中下载依赖包默认依赖库:来自网络在本地搭建依赖库可以节约带 ...

  4. linux-查看磁盘硬盘空间

    du :查看文件和目录的磁盘使用情况 用法 du [选项][文件] -s:仅显示总计只列出最后加总的值 -h:以K/M/G为单位提高信息的可读性 du -sh文件名  显示文件的大小 du -sh文件 ...

  5. poj 3352 边连通分量

    思路与poj3177一模一样. #include<iostream> #include<cstdio> #include<cstring> #include< ...

  6. PhotoShop—剪贴蒙版

    工作中发现剪贴蒙版方便好用,所以简单分享下~ 一.剪贴蒙版有什么作用 1.文字上色 2.裁剪图片 3.添加背景 等 二.剪贴蒙版怎么使用 1.新建层,打上字如图 2.文字上面再建层加上效果如渐变 3. ...

  7. HDOJ2021发工资咯:)

    发工资咯:) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  8. Jquery选择器 讲解

    在Dom 编程中我们只能使用有限的函数根据id 或者TagName 获取Dom 对象. 然而在jQuery 中则完全不同,jQuery 提供了异常强大的选择器用来帮助我们获取页面上的对象, 并且将对象 ...

  9. money 转换成 varchar

    Sql :cast(sum(colname) as varchar) 或者 convert(varchar,sum(colname)) ),sum(colname))

  10. 配置tomcat免安装版服务器

    一.首先,确保服务器已经安装java环境,没有tomcat的可以到这里下载 http://tomcat.apache.org/ 二.解压下载的压缩包,我是解压到D盘根目录下的.记住这个目录,后面会用到 ...