通過USB資料線實現Android端與PC端的通訊

2021-07-08 10:04:13 字數 2650 閱讀 5566

one goal ,one passion!

給浦發銀行做的乙個專案,其中最讓人頭疼的一點是,要求必須使用usb資料線進行資料的互動.這就遇到兩個問題:

1.由於每個pc端的ip不同 然而 pad端ip="127.0.0.1",所以pad(android端)不能作為client端.要讓pc作為client端主動發起請求連線.

2.使用模擬器時通訊一切正常,可是使用了pad進行測試時根本無法通訊,問了公司老大,查了一些資料終於找到了其中的解決辦法.

使用虛擬機器可以的原因也許是:虛擬機器執行在pc電腦上,虛擬機器內部做了一些處理. 可是使用真機時需要將pc上的埠**來作為請求埠,這就需要是用adb命令進行**操作

第一. pc端**操作:
先做準備工作.將我們的adb路徑配置到path中,否則的話會報錯的.以為執行adb命令不是系統級別,是不能執行的一般我們的sdk中都有adb.exe檔案.在sdk/platform-tools下.
1,先執行adb命令 這些命令在cmd命令列也可以執行

//這句adb命令可以不用.執行下面兩句也可以實現**.只是為了避免重複開啟service所以在**埠前先stop一下 

runtime.getruntime().exec("adb shell am broadcast -a notifyservicestop");

//**的關鍵**

runtime.getruntime().exec("adb forward tcp:5000 tcp:13000");

runtime.getruntime().exec("adb shell am broadcast -a notifyservicestart");

2,接下來就和普通的socket通訊沒有什麼區別了

try 

// 讀到後台傳送的訊息 然後去處理

readmsg = readmsgfromsocket(in);

if (readmsg.length() == 0)

}

// 將要返回的資料傳送給pc

out.write((readmsg + "1").getbytes());

out.flush();

} catch (exception e)

}in.close();

} catch (exception e) finally

}}.start();

} catch (exception e)

//乙個讀取輸入流的方法

public

static string readmsgfromsocket(inputstream in) catch (exception e)

return msg;

}

第二 android端關鍵**:
android端其實就方便多了,作為服務端我們只需要監聽埠就可以了.

關鍵**如下:

class

socketserverthread

extends

thread

} catch (ioexception e)

}// 暴露給外部呼叫寫入流的方法 如:socketserverthread.sendmsg(str)

public

void sendmsg(string msg) catch (ioexception e)

}class

socketreadthread

implements

runnable

public

void run()

// 讀到後台傳送的訊息 然後去處理

currcmd = readmsgfromsocket(in);

// 處理讀到的訊息(主要是身份證資訊),然後儲存在sp中;

if (currcmd.length() == 0)

if (readmsg .equals("0002"))

// 將要返回的資料傳送給 pc

out.write((readmsg + "flag").getbytes());

out.flush();

} catch (exception e)

}in.close();

} catch (exception e) finally

}public string readmsgfromsocket(inputstream in) catch (exception e)

return msg;}}

}//有一些變數的宣告沒有給出來,很簡單的東西不在寫了.

終於搞定了.把這快搞定浦發的專案基本就ok了.終於能歇歇了.哦!忘記一點.如果看埠有沒有**成功可以通過cmd命令列檢視.
netstat -ano | findstr "

80" (注80是你想要看檢視的埠號)

如圖則恭喜我們**成功

手機助手通過usb資料線連線

這邊主要說一下pc是如何同手機建立通訊 a應用泡在pc電腦上面,並通過socket連線127.0.0.1 8000埠,注意這是該電腦上面本地埠,adb.exe程式進行監聽8000埠 手機端應用b 或者服務程序 使用socket監聽本地埠127.0.0.1 9000,注意這個是手機系統上面本地埠 通過...

都是USB資料線惹得禍

事故一 新買的掃瞄器,配了一根加長的usb線,結果發現使用中會找不到掃瞄器,開始懷疑驅動安裝問題,換驅動,故障依舊,換介面,還是不行,換主機,換掃瞄器.無果.最後更換usb資料線,故障解除.事故二 行動硬碟用的資料線,雙接頭供電的,很久以前就出現偶爾會讀不出盤,開始以為主機供電不足,更換了主機電源後...

Android 不通過USB資料線除錯的方法

在開發android應用時,通常情況下是通過usb資料線連線裝置和計算機,但對於一些需要使用usb裝置的應用,這種方法就碰到了麻煩,手機的usb介面已經和外接的usb裝置連線,無法再連資料線,此時可以通過網路tcpip的方法來進行。也就是然adb 通過網路來連線裝置,而無需usb資料線。具體方法如下...