我在我的服务器中有这个代码(散布在构造函数等周围,但我遗漏了不必要的部分):
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地址?
答案 0 :(得分:2)
默认的绑定地址是INADDR_ANY,它是0.0.0.0,这意味着套接字将通过所有接口接受连接。您的代码完全正确,除非它不是确定您的IP地址的正确方法。您可以直接通过套接字API获取它,而无需创建套接字。
答案 1 :(得分:1)
你从哪里获得该代码?
试试这个:
#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;
}
然后看看this discussion。