在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