android模擬器與pc,模擬器與模擬之間用socket進行通訊和得到模擬器ip地址程序

在本機上啓動兩個模擬器,本機(PC)和模擬器的信息以下:服務器

        你們能夠看到,兩個模擬器的IP地址都是徹底同樣的,因此要實現兩個模擬器之間的通訊,使用模擬器的IP地址是辦不到的。網絡

        獲取模擬器名稱:socket

        >adb devicestcp

        List of devices attachedspa

        emulator-5554 device調試

        emulator-5556 deviceserver

        模擬器提供了一個特殊的IP,此IP的地址爲10.0.2.2,此IP地址能夠說等同於PC本機的IP地址127.0.0.1 。因此,經過此特殊IP地址,實現PC本機與模擬器的通訊是沒有問題。blog

 

【PC-SERVER / 模擬器-CLIENT】it

        目的:經過7100端口跟服務器進行通訊。後臺

        實施方法比較簡單,直接按照下面的方法就能夠了。

 

        方法1:

        PC-SERVER:ServerSocket server = new ServerSocket(7100);

        模擬器-CLIENT:Socket socket = new Socket("192.168.1.3", 7100);

        方法2:

        PC-SERVER:ServerSocket server = new ServerSocket(7100);

        模擬器-CLIENT:Socket socket = new Socket("10.0.2.2", 7100);

 

【模擬器-SERVER / PC-CLIENT】

        目的:鏈接到服務器的7100端口。

        實施操做稍微複雜一些,不能按照前面的方法來進行。要達到此目的,先要進行端口映射。

        把本機端口TCP/6100映射到模擬器TCP/7100端口(UDP也是同樣)。

        >adb –s emulator-5554 forward tcp:6100 tcp:7100

        端口映射成功後,再進行下面的實驗。

 

        方法1(正確):

        模擬器-SERVER:ServerSocket server = new ServerSocket(7100);

        PC-CLIENT:Socket socket = new Socket("127.0.0.1", 6100);

 

        方法2(錯誤):

        模擬器-SERVER:ServerSocket server = new ServerSocket(7100);

        PC-CLIENT:Socket socket = new Socket("192.168.1.3", 6100);

 

        錯誤緣由是127.0.0.1是本機環路IP,跟本機IP沒有映射關係,因此發送到本機IP的鏈接請求,沒法映射到127.0.0.1的環路IP上。

        因爲這個緣由,兩臺PC機上的模擬器之間,是沒法進行網絡鏈接的。若是要實現鏈接,只能在做爲服務器的PC上,運行一個用於數據中繼的後臺程序,進行數據的轉發。

 

【模擬器(5554)-SERVER / 模擬器(5556)-CLIENT】

        目的:模擬器(5556)鏈接到模擬器(5554)的7100端口。

        實施操做也相對複雜一些。要達到此目的,也要先進行端口映射。

        把本機端口TCP/6100映射到模擬器(5554)TCP/7100端口(UDP也是同樣)。

        >adb –s emulator-5554 forward tcp:6100 tcp:7100

        端口映射成功後,再進行下面的實驗。

 

        方法1(正確):

        模擬器(5554)-SERVER:ServerSocket server = new ServerSocket(7100);

        模擬器(5556)-CLIENT:Socket socket = new Socket("10.0.2.2", 6100);

 

原理說明:

        模擬器(5556)經過鏈接10.0.2.2:6100,至關於鏈接本機(PC)的127.0.0.1:6100,因爲本機IP的6100端口進行過端口 映射,映射到模擬器(5554)的7100端口。因此,來自模擬器(5556)的鏈接請求會發送到模擬器(5554)上。實現了兩個模擬器之間的網絡通訊 功能。

        此方法在本機調試時很是有用。

 

        方法2(錯誤):

        模擬器(5554)-SERVER:ServerSocket server = new ServerSocket(7100);

        模擬器(5556)-CLIENT:Socket socket = new Socket("192.168.1.3", 6100);

 

        錯誤緣由跟【PC-CLIENT / 模擬器-SERVER】的方法2同樣。

轉自:http://japankn.iteye.com/blog/1744031

相關文章
相關標籤/搜索