zoukankan      html  css  js  c++  java
  • (转)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("12580"));
                client.Connect(EPhost);          
                byte[] t_data = new byte[1024];
                string data = null;
                int i = 0;
                 while ((i = client.Receive(t_data)) != 0)
                 {
                     data = Encoding.UTF8.GetString(t_data, 0, i);                      
    
                 }
                 client.Close();
                 return data;             
            }
        }
    }
  • 相关阅读:
    Android——监听事件OnLongClickListener
    Android——edittext的几个属性
    源码安装Postgresql9.4.1
    添加产品唯一性限制以后,复制按钮不能使用
    [转载]git 忽略某些文件
    grep 命令搜索 带空格的字符
    听故事学会计笔记
    利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题
    8.0 Qweb 报表编写步骤
    Buff系统
  • 原文地址:https://www.cnblogs.com/halfmanhuang/p/3987522.html
Copyright © 2011-2022 走看看