今天我們介紹Android下的socket通信,並編寫一個小程序:android作為客戶端,通過socket發送數據到我們的pc機,pc機就是服務器。
分兩個實驗完成:我們先在模擬器上實現,然後在真實的手機上實現。
1.
設置環境,兩個實驗均在Ubuntu11.04下完成:
第一個實驗是android模擬器作為客戶端,第二個實驗是真實的android手機作為客戶端,兩個實驗的服務器都是我們的pc機,並且服務器端用c++實現,客戶端用java實現:
第一個實驗的ip配置:
主機eth0:192.168.1.2
pc服務器端口:9400
第二個實驗的ip配置:
主機lwan0:192.168.1.100
pc服務器端口:9500
注意,第一個實驗是android模擬器作為客戶端,因此要設置主機的eth0的ip地址,而第二個實驗是真實的android手機作為客戶端,它和pc機(服務器)在一個無線路由器局域網裡,因此我們要設置主機的lwan的ip地址,不過由於主機和真實手機的ip都是路由器dhcp自動分配的,因此無需額外的配置命令,你可以改成你自己的ip地址。
第一個實驗的配置命令很簡單:
sudo ifconfig eth0 192.168.1.2
首先介紹第一個實驗:
由於模擬器的特殊性,因此我們需要將模擬器的端口映射到主機的某個端口,這樣才可以和模擬器相互通信。
1.
端口映射:
在android sdk的platform-tools下有一個adb可執行程序,我的路徑是android-sdk-linux_x86/platform-tools/adb,運行如下命令進行端口映射:
cd android-sdk-linux_x86/platform-tools
./adb forward tcp:9400 tcp:9400
上面命令的意思是將模擬器的9400端口映射到主機的9400端口,這樣模擬器向192.168.1.2:9400發送的數據就會被映射到主機的9400端口(主機的ip地址是192.168.1.2),而我們的主機只要監聽本地的9400端口即可。這裡我們使用tcp socket