android udp 端口映射方法

源文地址:http://hi.baidu.com/profoot/blog/item/d622b7fa86f299334e4aeab5.html
最近在模擬器上調試udp通信,在開發機上用SocketTool開了一個udp server,發現SocketTool能收到模擬器上調試的應用發出的消息,但是服務器反饋給模擬器的應答卻始終收不到。在手機上調試卻沒有這個問題,懷疑問題出現模擬器上,看了一下SDK文檔模擬器的網絡機制部分,有這麼一段話。


Each instance of the emulator runs behind a virtual router/firewall service that isolates it from your development machine's network interfaces and settings and from the internet. An emulated device can not see your development machine or other emulator instances on the network. Instead, it sees only that it is connected through Ethernet to a router/firewall.

大概意思就是開發機和模擬器之間還隔着一層防火牆,模擬器是看不到開發機的(很像NAT)。要讓模擬器能正常收發數據,必須進行對模擬器設置端口重定向。並且在模擬器上如果要訪問開發機需要使用10.0.2.2這個地址(virtualbox也是用這些地址)。
有兩種方法可以設置重定向,利用模擬器的console,或者用adb。
1、利用模擬器的console
   telnet連接到console,啓動的第一個模擬器的console端口是5554(後面啓動的模擬器依次增加2,因爲一個模擬器佔用兩個端口,5555是留給adb的,若後面又開了一個模擬器,那麼console端口就是5556)。
   telnet 127.0.0.1 5554
   如果要增加一條重定向設置,採用如下命令
   redir add <protocol>:<host-port>:<guest-port>
   例如:redir add udp:5000:6000  這樣所有在開發機上5000端口的udp通信都會被重定向到模擬器的6000端口上。
   添加成功後,我們可以用redir list命令來列出已經添加的映射端口,redir del可以驚醒刪除。

2、利用adb命令
adb forward tcp:6100 tcp:7100
這樣就將宿主機的6100端口映射到模擬器的7100端口上(將tcp改成udp,會一直提示綁定失敗)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章