虽然互联网浏览在模拟器中工作,但我的应用程序也在模拟器中运行,无法通过TCP连接到端口5222上的互联网上的服务器。我很确定我的路由器或我的电脑上没有防火墙,因为我可以从我的电脑上telnet到那个ip:端口。
以下是模拟器上的数据包跟踪的屏幕截图:http://i.stack.imgur.com/sIFFM.png
仿真设备上的数据包跟踪显示该特定端口的每个SYN数据包都使用RST,ACK进行应答,并且我的应用程序已通过“连接错误”关闭连接。
为什么模拟器阻塞(?)这些端口?我怎样才能改变它?
答案 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(s)流量通过该代理。不是所有TCP连接。如果未提供-http-proxy命令,模拟器将查找http_proxy环境变量并自动使用与上述格式匹配的任何值。