【问题标题】:QTcpServer can only be accessed through localhostQTcpServer 只能通过 localhost 访问
【发布时间】:2013-11-15 07:39:04
【问题描述】:

我的电脑在本地网络的 IP 是192.168.0.100,我的 QTcpServer 是用

if (!tcpServer->listen(QHostAddress::LocalHost, 1234)) {

当我尝试使用netcat 192.168.0.100 1234 连接时,连接被拒绝,但netcat localhost 1234 成功。

同时,如果我用netcat -l -p 1234 收听,我可以同时连接192.168.0.100localhost,没有任何问题。

这让我摸不着头脑,为什么会这样?

【问题讨论】:

    标签: c++ qt ip qtcpserver


    【解决方案1】:

    为了接受来自外部的连接,您必须收听0.0.0.0,而不是127.0.0.1localhost。后者只允许来自同一台机器的连接。也是QHostAddress::LocalHost的值。

    所以将第一个参数更改为QHostAddress::Any,它应该可以工作。

    【讨论】:

    • 到目前为止,我一直认为在 localhost 上监听意味着你可以获得到达本地机器的所有连接,所以我有点认为QHostAddress::LocalHostQHostAddress::Any 相同。感谢您清理它。
    • 是的,这是经常引起混淆的原因。收听127.0.0.1 适用于您希望允许来自外部的连接的情况,例如当您在与您的网络服务器相同的机器上运行数据库服务器并且不想想要暴露它等等。
    • 它似乎也反过来了。我试过tcpServer->listen(QHostAddress("192.168.56.1"), 1234)),现在它不接受netcat localhost 1234,只接受netcat 192.168.56.1
    • 我觉得描述监听特定接口与所有接口之间的区别可能会增加价值。
    【解决方案2】:

    localhost 在单独的网络接口上

    您可以使用QHostAddress::Any 来监听外部连接

    【讨论】:

      猜你喜欢
      • 2011-07-17
      • 2021-09-12
      • 1970-01-01
      • 2013-03-18
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多