1

尽管 Internet 浏览可以在模拟器中运行,但我也在模拟器中运行的应用程序无法通过 TCP 通过端口 5222 连接到 Internet 上的服务器。我很确定我的路由器或我的电脑上没有防火墙,因为我可以从我的电脑远程登录到那个 ip:port。

这是在模拟器上获取的数据包跟踪的屏幕截图:http: //i.stack.imgur.com/sIFFM.png

模拟设备上的数据包跟踪显示,到该特定端口的每个 SYN 数据包都以 RST、ACK 应答,并且连接被我的应用程序关闭并出现“连接错误”。

为什么模拟器会阻止(?)这些端口?我怎样才能改变它?

4

2 回答 2

1

模拟器在它自己的网络上运行,所以如果你想通过不同的端口进行通信,你必须为非标准端口正确设置转发。

如果您想让外部应用程序连接到在模拟器中运行的应用程序,您需要设置转发,以便外部应用程序连接到您的开发机器上的端口,并且模拟器会将其转发到 10.0.2.15,即模拟器地址。

有关更多信息,请参阅开发指南:

http://developer.android.com/guide/developing/tools/emulator.html#connecting

于 2011-01-19T21:40:51.367 回答
1

知道了。正如http://developer.android.com/guide/developing/tools/emulator.html#proxy所述,环境变量 http_proxy 中设置的代理将用于所有 TCP 连接。但是我的代理配置为只允许某些 TCP 端口。

unset $http_proxy

或使用

emulator -http-proxy none

(“none”不是一个正确的代理,所以它会给你一个错误信息。但至少环境变量没有被处理)

PS:

如果未提供 -http-proxy 命令,则模拟器会查找 http_proxy 环境变量并自动使用与上述格式匹配的任何值。

谷歌,太疯狂了。我设置了 http_proxy 环境变量,因为我不希望 http(s) 流量通过该代理。并非所有 TCP 连接

于 2011-01-20T17:32:22.397 回答