Boost Asio总是返回0.0.0.0 IP

Boost Asio always returns 0.0.0.0 IP

本文关键字:IP 返回 Asio Boost      更新时间:2023-10-16

我的服务器中有以下代码(分散在构造函数等中,但我忽略了不必要的部分):

using namespace boost::asio;
io_service ioserv;
ip::tcp::endpoint endpoint(ip::tcp::v4(), 1922);
ip::tcp::acceptor acceptor(ioserv, endpoint);
ip::tcp::socket socket(ioserv);
acceptor.accept(socket);

现在我想把我的IP写入控制台。不幸的是,两个

cout << endpoint.address() << endl;

cout << acceptor.local_endpoint().address() << endl;

打印

0.0.0.0

如何获取我的机器的IP地址?

你从哪里得到的代码?

试试这个:

#include <boost/asio.hpp>
using boost::asio::ip::tcp;    
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(boost::asio::ip::host_name(), "");
tcp::resolver::iterator iter = resolver.resolve(query);
tcp::resolver::iterator end; // End marker.
while (iter != end)
{
    tcp::endpoint ep = *iter++;
    std::cout << ep << std::endl;
}

看看这个讨论。

默认绑定地址为INADDR_ANY,即0.0.0.0,这意味着套接字将接受通过任何接口的连接。你的代码是完全正确的,只是它不是确定你的IP地址的正确方法。您可以直接通过Sockets API获取,而无需创建套接字。