在android應用程序中運行服務器套接字,我使用該模擬器進行調試。使用仿真器控制檯和「redir add tcp:8888:8888」我可以使我的開發機器上運行的程序可用(localhost:8888)。Android模擬器從其他主機訪問redir端口
然而,redir端口在任何其他網絡接口上都不可用,這意味着我無法通過本地開發機器上的host-ip或網絡上的輔助機器訪問它。任何人都知道是否有可能使仿真器綁定到所有網絡接口,或者有其他技巧來使網絡上的其他主機連接到仿真器?
謝謝
在android應用程序中運行服務器套接字,我使用該模擬器進行調試。使用仿真器控制檯和「redir add tcp:8888:8888」我可以使我的開發機器上運行的程序可用(localhost:8888)。Android模擬器從其他主機訪問redir端口
然而,redir端口在任何其他網絡接口上都不可用,這意味着我無法通過本地開發機器上的host-ip或網絡上的輔助機器訪問它。任何人都知道是否有可能使仿真器綁定到所有網絡接口,或者有其他技巧來使網絡上的其他主機連接到仿真器?
謝謝
從技術上講,模擬器綁定本地環回套接字。您可以從netstat命令
$ netstat -an | more
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
...
tcp4 0 0 127.0.0.1.8888 *.* LISTEN
...
看到「本地地址」應該是爲了* 0.8888爲您服務,能透過外面。
您唯一的解決方案是將端口從物理接口轉發到本地環路。
在linux上,我知道你正在使用的系統,最簡單的方法是通過iptables使用任何源接口作爲輸入,127.0.0.1作爲目標地址。
您將需要管理員權限,但可以在每個會話的基礎上完成。
有人能解釋如何做達里奧上面說的?我很難找出iptables命令來做到這一點。 >你唯一的解決辦法是 >從物理 >接口到本地環路轉發端口。 > >在Linux上,這是我的系統 >瞭解您正在使用,最簡單的 >辦法做到這一點是iptables的 的手段>使用任何源接口爲輸入 >和127.0 .0.1作爲目的地址。 感謝 (我會把這個作爲他的回答下一個音符,但我不明白怎麼做..) – michaelmoo 2011-02-02 09:04:27
我發現OP的使用rinetd的評論/建議比iptables容易得多。
rinetd可以攔截一個接口上的連接並將它們轉發到不同的IP;所以,要解決不是比主機其他計算機訪問仿真器的這個問題,您攔截到您的主機傳入連接,並轉發給127.0.0.1
方法如下:
首先,安裝rinetd (http://www.boutell.com/rinetd/)
sudo apt-get install rinetd
」。該命令可以在其他Linux發行版不同...接下來,在設置了端口重定向模擬器:
telnet localhost 5554
」(或任何你AVD端口)redir add <protocol>:<host port>:<emu port>
」(例如「redir add tcp:5000:7000
」轉發在仿真器發送到端口5000的主機上端口7000的TCP數據)配置rinetd:
/etc/rinetd.conf
並添加行「<host ip> <host port> 127.0.0.1 <localhost port>
」。所以,如果您的主機的IP地址是123.45.67.89,你要使用5000端口,然後將其轉發到127.0.0.1:5000,「123.45.67.89 5000 127.0.0.1 5000
」我不知道,如果rinetd是你後自動啓動安裝..運行它:
/usr/sbin/rinetd
」要修改配置文件後重新初始化rinetd
cat /var/run/rinetd.pid
」 顯示您rinetd的PIDsudo kill -1 <pid>
」 重新初始化它(例如, 「sudo kill -1 3225
」)感謝花花公子。這對我很有幫助。 – Sathish 2014-04-29 08:54:54
您也可以使用端口轉發的netcat。
啓動模擬器,然後運行使用終端如下:
telnet localhost 5554
redir add tcp:<host port>:<emu port>
quit
設置端口轉發:
nc -l -p <external port> -c "nc 127.0.0.1 <host port> -v" -v
如果-c
開關不可用,則可以使用以下代替:
nc -l <external port> | nc 127.0.0.1 <host port> -v
舉個例子,如果你想讓其他電腦成爲abl e連接到你的android模擬器的端口1234,你的主機需要2個端口。
<host port>
:端口的本地接口上偵聽然後轉發消息,端口1234,我們將使用9200<external port>
:端口的任何接口上監聽,然後郵件轉發到<host port>
。我們將使用9100命令:
redir add tcp:9200:1234
nc -l -p 9100 -c "nc 127.0.0.1 9200 -v" -v
使用http://www.boutell.com/rinetd/找到一個醜陋的解決方法,但它確實不理想有兩個額外的網絡堆棧是緩衝和轉發。 – Thingfish 2010-10-27 12:33:14