Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Anroid 手機助手 詳細解析 概述(四)

Anroid 手機助手 詳細解析 概述(四)

編輯:關於Android編程

算了下時間居然有20天沒來更新了,人變懶了,不過也沒時間了,今天抽點時間上點干貨,覺得有用的就收下吧。

有很多人問我如何和手機建立連接(USB數據線連接,至於wifi 那是以後討論的),和手機通信最後還是通過socket,只是這中間借助了adb 的forward。要建立socket 連接必須要有ip地址和端口號。搞過socket 編程的人都知道服務端會監聽某一個端口,直到有連接請求的時候才會產生一個socket,然後通過這個socket和客戶端通信,所以這裡就有兩個問題

1) 手機的IP地址和端口號到底是多少

2) 服務端在哪裡,手機如何接收PC 端發送的socket 連接。

 

首先第一個問題

再查看手機信息之前誰也不知道手機的IP 地址多少,端口號這個更加不知道用哪個了。神奇的ADB 給我提供了解決辦法。ADB 裡面有個forward 命令,這個命令的意思網上有很多解釋。命令格式如下:

adb -s "xxxx" forward tcp: 10000 tcp: 2000

上面命令的10000,和2000是兩個端口號,意思就是說所有發往本地計算機(127.0.0.1)10000端口號的消息都會被adb 重定向到手機的2000端口號,這裡的10000和2000 是自己定的,隨便定就可以了,但是不能和現有的沖突。所以第一個問題也就解決了,要連接上手機必須先調用重定向,然後再調用socket 函數 connect和服務端建立連接。步驟如下

1) adb -s "xxxx" forward tcp: 10000 tcp: 2000

2) 調用socket 函數,關鍵是 sockAddr 的初始化

SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr));

sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(L"127.0.0.1");
sockAddr.sin_port = htons(10000);

int r = ::connect( m_socket, (sockaddr*)&sockAddr, sizeof(sockAddr) );

 

至於第二個問題那就需要手機端的配合了,在上面調用了connect 函數,那就肯定得有個地方一直在accept,那這個地方在哪裡?這個就需要你自己寫一個APK 程序了,安裝到手機上,然後監聽端口,接收連接。要接收連接,就需要把socket 綁定到一個端口上,這回你肯定知道了這個要綁定的端口就是上面 forward 的2000端口。

 

 

最後來整理一下這個流程,下面是結合我自己的代碼的一個流程

1) 使用adb 判斷是否有設備,命令如下

adb devices

 

2) 如果存在設備並且是device狀態(這裡不考慮驅動的問題,有關驅動的看上一節),則判斷手機上是否已經安裝了自己的APK 程序。如果沒有安裝則安裝一個自己的APK。

adb -s "xxx" install "xxxx.apk"

3) 安裝成功之後 重定向端口號,也許你可能需要重定向多個不同端口號,那就多調用幾次forward,傳入不同的參數就可以。

adb -s "xxxx" forward tcp: 10000 tcp: 2000

 

 

4) 啟動APK 的一個服務,或者APK 的activity都可以,目的就是要讓手機端啟動線程來接受PC 端發起的連接請求。可以參數adb 的命令

adb -s "xxx" shell am start

 

 

5) 和手機端進行socket 通信。

SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr));

sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(L"127.0.0.1");
sockAddr.sin_port = htons(10000);

int r = ::connect( m_socket, (sockaddr*)&sockAddr, sizeof(sockAddr) );

 

 

轉讓Android,IOS 手機助手各種技術資料,文檔,以及源碼,有需要的可以聯系我QQ: 2506314894

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved