boost asio TCP 服务器必须绑定到 IP 地址?

boost asio TCP server must bind to an IP address?

我不确定自己是否正确使用了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?

谢谢。

绑定到 0.0.0.0。那是 "wildcard",它在所有接口上侦听任何传入连接。

如果您绑定到 127.0.0.1,您的服务器将仅接受通过回送的传入连接,这将不允许您的客户端连接(因为您的客户端未使用回送)。

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

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