【问题标题】:Android Emulator (qemu) does not allow certain tcp connections (RST,ACK as answer to SYN)Android Emulator (qemu) 不允许某些 tcp 连接(RST、ACK 作为对 SYN 的回答)
【发布时间】:2011-01-19 21:27:00
【问题描述】:

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

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

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

为什么模拟器会阻止(?)这些端口?怎么改?

【问题讨论】:

    标签: android android-emulator qemu


    【解决方案1】:

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

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

    查看开发指南了解更多信息:

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

    【讨论】:

    • 请注意,有问题的应用程序在模拟器中运行。我会在问题中更清楚地说明这一点。
    • @Flow 我的回答是关于如何连接到模拟器中的应用程序
    • wajiw:走错路了。从模拟器中的应用程序启动到特定主机:端口的连接。很抱歉造成误解。
    • 哦,有道理。顺便说一句很好发现
    • 然后请投票赞成这个问题(如果你还没有这样做的话):-)
    【解决方案2】:

    知道了。正如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 连接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 2014-03-04
      • 2013-07-05
      相关资源
      最近更新 更多