1. 程式人生 > >PC和Android模擬器訪問及模擬器之間tcp/udp通訊

PC和Android模擬器訪問及模擬器之間tcp/udp通訊

Android系統預設只能通過IP(10.0.2.2)單向訪問PC電腦,而PC電腦不能通過IP來直接訪問Android模擬器系統。要想實現PC電腦和Android模擬器系統以及Android模擬器之間相互通訊必須藉助埠重定向(redir)來實現。

先說說埠重定向所需要的telnet客戶端安裝:
windows:
安裝telnet客戶端。如果沒有安裝,可以在windows程式管理中的開啟或關閉系統功能下找到telnet客戶端選單項來啟用telnet客戶端功能。
linux:
自行安裝telnet客戶端。

一、PC電腦不能直接訪問Android模擬器系統的原因
Android系統為實現通訊將PC電腦IP設定為10.0.2.2,自身為10.0.2.15/127.0.0.1。然而PC電腦並沒有為Android模擬器系統指定IP,所以PC只能通過埠重定向來實現和Android模擬器的通訊。

二、PC電腦和Android模擬器系統之間通訊

1、執行模擬器

2、開啟window 命令列,執行:

telnet localhost 5554

5554是模擬器的埠(位於Android模擬器視窗標題欄),執行之後會進入android console

3、在console下執行:

格式:redir add < udp/tcp >: < pc埠 >: < 模擬器埠 >
例如:redir add udp:2888:2888
     redir add tcp:2888:2888

執行此命令之後,會把PC 2888 埠接收到的tcp/udp資料轉到模擬器的2888埠。

三、多個Android模擬器系統之間通訊

1、啟動模擬器emulator-5554和emulator-5556

2、開啟dos視窗執行telnet localhost 5554連線到模擬器5554

3、成功連線後,繼續執行:redir add tcp:5000:6000將PC埠5000繫結到模擬器5554的埠6000上。

4、此時模擬器5556通過向PC電腦埠5000(即地址:10.0.2.2:5000)傳送tcp/udp資料包跟模擬器5554通訊。

5、同理根據步驟2、3來實現PC電腦對模擬器5556的埠轉發。

新增成功後,我們可以用redir list命令來列出已經新增的對映埠,redir del可以進行刪除。

相信只要理解了PC電腦和Android模擬器系統之間通訊

,便知道怎麼實現多個模擬器之間通訊。

  TCP通訊

進行TCP通訊的時候,在本機上啟動兩個模擬器,本機(PC)和模擬器時發現兩個模擬器的IP地址都是完全一樣的,所以要實現兩個模擬器之間的通訊,使用模擬器的IP地址是辦不到的。必須進行埠對映。
模擬器提供了一個特殊的IP,此IP的地址為10.0.2.2,此IP地址可以說等同於PC本機的IP地址127.0.0.1 。
所以,通過此特殊IP地址,實現PC本機與模擬器的通訊是沒有問題。
首先 ,執行模擬器在命令列adb –s emulator -模擬器 forward tcp:埠號 tcp:埠號
(例如:adb –s emulator-5554 forward tcp:8080 tcp:8090)

PC-SERVER:ServerSocket server = new ServerSocket(8080);
模擬器-CLIENT:Socket socket = new Socket("10.0.2.2", 8090);

接下來是如何在兩個模擬器之間進行通訊:同樣的先進行埠對映:
adb –s emulator -模擬器 forward tcp:埠號 tcp:埠號(先執行模擬器).
程式碼如下:
adb –s emulator-5554 forward tcp:8080 tcp:8081
模擬器(5554)-SERVER:ServerSocket server = new ServerSocket(8080);
模擬器(5556)-CLIENT:Socket socket = new Socket("10.0.2.2", 8081);

因為模擬器5556連線的地址10.0.2.2:8080相當於本機的127.0.0.1:8080,
由於進行了埠對映本機IP8080上的連線請求都對映到5554:8081上,
因此模擬器5556的請求會發送到5554上.


本文轉自: http://my.oschina.net/owen123456/blog/159680