Android Emulator(qemu)不允许某些tcp连接(RST,ACK作为SYN的答案)

时间:2011-01-19 21:27:00

标签: android android-emulator qemu

虽然互联网浏览在模拟器中工作,但我的应用程序也在模拟器中运行,无法通过TCP连接到端口5222上的互联网上的服务器。我很确定我的路由器或我的电脑上没有防火墙,因为我可以从我的电脑上telnet到那个ip:端口。

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

仿真设备上的数据包跟踪显示该特定端口的每个SYN数据包都使用RST,ACK进行应答,并且我的应用程序已通过“连接错误”关闭连接。

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

2 个答案:

答案 0 :(得分:1)

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

如果要将外部应用程序连接到在模拟器中运行的应用程序,则需要设置转发,以便外部应用程序将连接到开发计算机上的端口,模拟器会将其连接到10.0.2.15。这是模拟器的地址。

有关详细信息,请参阅开发指南:

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

答案 1 :(得分: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连接