mars課程里關于Socket通信那一課說那些程序只能在真機上運行,模擬器模擬不了,實際上是可以的。
Android模擬器是通過一個類似路由器的虛擬網絡層與電腦相連,可以看作模擬器是處于“內網”當中,每個模擬器都有自己的虛擬路由器,而且虛擬路由器的地址總是10.0.2.1,在模擬器看來,電腦的地址是10.0.2.2,模擬器自己的地址是10.0.2.15,無論你啟動多少個模擬器,對于模擬器來說都是這樣的地址,模擬器之間不能直接通信。
啟動模擬器的時候,電腦會給模擬器分配兩個端口,通過這兩個端口,電腦就能操作模擬器。第一個啟動的模擬器的端口是5554和5555,第二個是5556和5557,以此類推,最多可以同時啟動32個模擬器。第一個端口(偶數端口)可以接受telnet連接,對模擬器進行設置,第二個端口(奇數端口)則接受adb連接,可以用來調試。第一個端口可以在模擬器窗口的標題欄看到,如下圖所示:

5554表示端口號,t表示模擬器名稱。
實際上,這些端口也是電腦監聽的端口,在電腦上通過netstat可以看到本機正在監聽這些端口,因此通過telnet localhost 5554就能連上第一臺模擬器,連上之后通過help命令可以查看操作幫助。
為了實現電腦和模擬器上的android程序進行socket通信,需要把程序開啟的端口通過端口映射設置到電腦上,這跟家里的路由器端口映射概念是一樣的。telnet到模擬器之后,通過
redir add tcp:1234:1234
就能把模擬器上的1234端口映射到電腦上,第一個表示電腦端口,第二個表示模擬器程序要使用端口,這兩個數字可以相同也可以不同,要映射udp端口就把tcp改為udp即可
redir add udp:1234:1234
這樣一來,當模擬器的程序打開1234端口時,在電腦上也打開了對應的端口,只要通過電腦連接127.0.0.1的對應端口,就連上了模擬器的程序端口,就可以通過電腦上的client向模擬器的server發送數據,不需要通過真機運行。
如果要讓第一個模擬器向第二個模擬器發送數據,也可以把第二個模擬器的端口映射到電腦上,然后在第一個模擬器程序中向10.0.2.2的對應端口發送數據即可。
模擬器還有一個很有意思的功能,每個模擬器默認的電話號碼就是它的第一個端口號,例如開了兩個模擬器,第一個撥打5556,第二個就會顯示5554來電,還能接通,發短信也可以,這樣就能模擬電話和短信功能。
詳細的信息可以看Dev Guide的模擬器部分:http://developer.android.com/guide/developing/devices/emulator.html
Android模擬器是通過一個類似路由器的虛擬網絡層與電腦相連,可以看作模擬器是處于“內網”當中,每個模擬器都有自己的虛擬路由器,而且虛擬路由器的地址總是10.0.2.1,在模擬器看來,電腦的地址是10.0.2.2,模擬器自己的地址是10.0.2.15,無論你啟動多少個模擬器,對于模擬器來說都是這樣的地址,模擬器之間不能直接通信。
啟動模擬器的時候,電腦會給模擬器分配兩個端口,通過這兩個端口,電腦就能操作模擬器。第一個啟動的模擬器的端口是5554和5555,第二個是5556和5557,以此類推,最多可以同時啟動32個模擬器。第一個端口(偶數端口)可以接受telnet連接,對模擬器進行設置,第二個端口(奇數端口)則接受adb連接,可以用來調試。第一個端口可以在模擬器窗口的標題欄看到,如下圖所示:
5554表示端口號,t表示模擬器名稱。
實際上,這些端口也是電腦監聽的端口,在電腦上通過netstat可以看到本機正在監聽這些端口,因此通過telnet localhost 5554就能連上第一臺模擬器,連上之后通過help命令可以查看操作幫助。
為了實現電腦和模擬器上的android程序進行socket通信,需要把程序開啟的端口通過端口映射設置到電腦上,這跟家里的路由器端口映射概念是一樣的。telnet到模擬器之后,通過
redir add tcp:1234:1234
就能把模擬器上的1234端口映射到電腦上,第一個表示電腦端口,第二個表示模擬器程序要使用端口,這兩個數字可以相同也可以不同,要映射udp端口就把tcp改為udp即可
redir add udp:1234:1234
這樣一來,當模擬器的程序打開1234端口時,在電腦上也打開了對應的端口,只要通過電腦連接127.0.0.1的對應端口,就連上了模擬器的程序端口,就可以通過電腦上的client向模擬器的server發送數據,不需要通過真機運行。
如果要讓第一個模擬器向第二個模擬器發送數據,也可以把第二個模擬器的端口映射到電腦上,然后在第一個模擬器程序中向10.0.2.2的對應端口發送數據即可。
模擬器還有一個很有意思的功能,每個模擬器默認的電話號碼就是它的第一個端口號,例如開了兩個模擬器,第一個撥打5556,第二個就會顯示5554來電,還能接通,發短信也可以,這樣就能模擬電話和短信功能。
詳細的信息可以看Dev Guide的模擬器部分:http://developer.android.com/guide/developing/devices/emulator.html