【问题标题】:boost asio TCP server must bind to an IP address?boost asio TCP服务器必须绑定一个IP地址?
【发布时间】:2015-06-13 13:59:01
【问题描述】:

我不确定我是否正确使用了BOOST ASIO,我的代码如下,

  boost::asio::ip::tcp::resolver resolver(io_);
  boost::asio::ip::tcp::resolver::query query(std::string("127.0.0.1"), port);
  boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query);
  acceptor_.open(endpoint.protocol());

它绑定到 127.0.0.1。当客户端在外部连接时,客户端使用 IP 地址 192.168.0.107 或类似的地址。 BOOST ASIO 实现的服务器只是简单地拒绝客户端连接。

那么有没有办法解决这个问题?我认为对于 apache2,apache2 不需要绑定到特定的 IP,任何来自任何服务器接口(假设有多个接口)的客户端请求都可以连接到 apache2。

有办法解决吗?还是没办法,只好修复服务器外网IP?

谢谢。

【问题讨论】:

    标签: c++ boost tcp boost-asio


    【解决方案1】:

    绑定到0.0.0.0。这是在所有接口上侦听任何传入连接的“通配符”。

    如果您绑定到127.0.0.1,您的服务器将只接受通过环回的传入连接,这不会让您的客户端连接(因为您的客户端没有使用环回)。

    【讨论】:

      【解决方案2】:

      您可以像这样创建一个端点来监听任何 IP:

      boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), listen_port );
      

      【讨论】:

        猜你喜欢
        • 2010-10-10
        • 1970-01-01
        • 2011-11-01
        • 1970-01-01
        • 2015-03-27
        • 1970-01-01
        • 2017-11-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多