[Android] Android 學習筆記:讓外部電腦可以連到模擬器內的網頁伺服器
最近有個需求,想要在模擬器裡面執行 Remote Web Desktop,
然後讓外面的電腦可以連到 Remote Web Desktop 的網頁~
要做到這件事,看起來好像不難,
只要先將模擬器那台電腦的 Port forward 到模擬器上的 Port 上,應該就可以了~
這方面可以參考 Android Developers: Using the Android Emulator,
下面是簡單的步驟說明~
1. 開啟模擬器,並取得模擬器的 port
先看模擬器視窗上的文字,通常是像 5554:AVDNameXXX 之類的東西~
這個 5554 就是模擬器在本機電腦上的 port~
如果你開了不只一個模擬器,可能就會看到其他的像是 5555:AVDNameYYY 等等~
2. 使用 telnet 連到模擬器
基本上就是 telnet 到步驟一拿到的 port 去,例如:
telnet localhost 5554
連進去後可以看到如下的畫面:
3. 下 redir 指令將本機的 port 轉向到模擬器上
假設我想將本機的 port 12345 轉向至模擬器內的 port 8999,可以這麼寫:
redir add tcp:12345:8999
基本上做完上面的步驟,就已經可以在本機電腦 A 上,
瀏覽 http://localhost:12345 來看到模擬器內 Remote Web Desktop 的網頁了~
然而,如果我到另外一台電腦 B 上面去,
想用 http://IP_MachineA:12345 的方式來看,就會連不上!!
研究了一下,在 just do IT: adb for remote connections 這篇文章有詳細的說明,
因為 adb 只會在 loopback address (也就是 localhost) 上接收 port forwarding,
因此從其他電腦連過來的連線,基本上是沒有人在聽的 =_=
狀況有點像下面的圖示:
原作者 rxwen 將原始的 adb 修改了一下,
好讓它可以接收來自所有網路介面的連線(也就是不只 loopback address),
因此就可以接受外部電腦 B 來的連線了!
我試了一下,似乎不能用上面的 redir add 的方式,
而必須改用 rxwen 用的 adb forward 指令來作 port forwarding 才能成功~
下面的步驟就是說明如何應用該作者的修改:
4. 下載該作者修改過的 adb,並放到 SDK 目錄中
可以到 http://rxwen-blog-stuff.googlecode.com/files/adb-windows.zip 下載,
若是要 Linux 版的請到該作者網頁去看~
將下載後的 zip 檔解開放到 SDKplatform-tools,
這會蓋掉舊的 adb.exe 和其他幾個檔案,請記得先備份以防萬一~
5. 重新啟動模擬器後,執行 adb forward 指令
先重啟模擬器,這樣可以清掉所有舊的 port forwarding 已經建立好的 socket…
接著在命令列模式下,執行下面的指令:
adb forward tcp:12345 tcp:8999
以上步驟完成後,就已經可以從外部電腦 B 連到模擬器內的 Remote Web Desktop 囉~