(轉)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;             
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM