2010-10-27 69 views
1

在android應用程序中運行服務器套接字,我使用該模擬器進行調試。使用仿真器控制檯和「redir add tcp:8888:8888」我可以使我的開發機器上運行的程序可用(localhost:8888)。Android模擬器從其他主機訪問redir端口

然而,redir端口在任何其他網絡接口上都不可用,這意味着我無法通過本地開發機器上的host-ip或網絡上的輔助機器訪問它。任何人都知道是否有可能使仿真器綁定到所有網絡接口,或者有其他技巧來使網絡上的其他主機連接到仿真器?

謝謝

+0

使用http://www.boutell.com/rinetd/找到一個醜陋的解決方法,但它確實不理想有兩個額外的網絡堆棧是緩衝和轉發。 – Thingfish 2010-10-27 12:33:14

回答

1

從技術上講,模擬器綁定本地環回套接字。您可以從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作爲目標地址。

您將需要管理員權限,但可以在每個會話的基礎上完成。

+0

有人能解釋如何做達里奧上面說的?我很難找出iptables命令來做到這一點。 >你唯一的解決辦法是 >從物理 >接口到本地環路轉發端口。 > >在Linux上,這是我的系統 >瞭解您正在使用,最簡單的 >辦法做到這一點是iptables的 的手段>使用任何源接口爲輸入 >和127.0 .0.1作爲目的地址。 感謝 (我會把這個作爲他的回答下一個音符,但我不明白怎麼做..) – michaelmoo 2011-02-02 09:04:27

5

我發現OP的使用rinetd的評論/建議比iptables容易得多。

rinetd可以攔截一個接口上的連接並將它們轉發到不同的IP;所以,要解決不是比主機其他計算機訪問仿真器的這個問題,您攔截到您的主機傳入連接,並轉發給127.0.0.1

方法如下:

首先,安裝rinetd (http://www.boutell.com/rinetd/

  • Linux的:無論是從鏈接下載它上面,或者,在在Ubuntu的終端,輸入 「sudo apt-get install rinetd」。該命令可以在其他Linux發行版不同...
  • 的Windows:從上面的鏈接下載(但它只是說95/98/NT ..)

接下來,在設置了端口重定向模擬器:

  • 在終端啓動AVD
  • ,輸入 「telnet localhost 5554」(或任何你AVD端口)
  • 一旦通過telnet連接,輸入 「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的PID
  • sudo kill -1 <pid>」 重新初始化它(例如, 「sudo kill -1 3225」)
+0

感謝花花公子。這對我很有幫助。 – Sathish 2014-04-29 08:54:54

0

您也可以使用端口轉發的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