C++ 如何将boost::asio::ip::tcp::v4打印成标准输出

C++ 如何将boost::asio::ip::tcp::v4打印成标准输出,c++,tcp,boost-asio,ipv4,C++,Tcp,Boost Asio,Ipv4,我正在运行boost.asio示例中的c++11聊天示例,并试图打印出tcp::v4()返回值,以查看服务器使用的ip地址。在boost::asio::ip::tcp上没有像在boost::asio::ip上那样工作的to_字符串函数 以下是聊天示例的server.cpp的主要功能: int main(int argc, char* argv[]) { try { if (argc < 2) { std::cerr << "Usage: ch

我正在运行boost.asio示例中的c++11聊天示例,并试图打印出tcp::v4()返回值,以查看服务器使用的ip地址。在boost::asio::ip::tcp上没有像在boost::asio::ip上那样工作的to_字符串函数

以下是聊天示例的server.cpp的主要功能:

int main(int argc, char* argv[])
{
  try
  {
    if (argc < 2)
    {
      std::cerr << "Usage: chat_server <port> [<port> ...]\n";
      return 1;
    }

    boost::asio::io_context io_context;

    std::list<chat_server> servers;

    for (int i = 1; i < argc; ++i)
    {
      tcp::endpoint endpoint(tcp::v4(), std::atoi(argv[i]));
      servers.emplace_back(io_context, endpoint);
    }

    io_context.run();
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }

  return 0;
}
intmain(intargc,char*argv[])
{
尝试
{
如果(argc<2)
{
标准:cerr
在boost::asio::ip::tcp上没有类似于在boost::asio::ip上工作的to_字符串函数

这很混乱。
boost::asio::ip::tcp
是一个从未实例化过的类(它是一个为协议建模的静态类),
boost::asio::ip
是一个名称空间,您不能期望打印名称空间

然后,在您的示例中有很多不相关的代码。为了方便起见,我们假设您的聊天室服务器正试图打印结束点:

struct chat_server {
    chat_server(boost::asio::io_context&, tcp::endpoint ep) {
        std::cout << "Serving on " << ep << "\n";
    }
};
        tcp::endpoint endpoint(ip::address_v4::loopback(), std::atoi(argv[i]));
如果您真的想将问题标题文字化,您应该打印端点的地址部分:

    std::cout << "Serving on " << ep.address() << "\n";
这是因为您没有绑定到接口。如果绑定到接口,则会稍微有用一些:

struct chat_server {
    chat_server(boost::asio::io_context&, tcp::endpoint ep) {
        std::cout << "Serving on " << ep << "\n";
    }
};
        tcp::endpoint endpoint(ip::address_v4::loopback(), std::atoi(argv[i]));
太长,读不下去了 您需要的所有代码:

#include <boost/asio.hpp>
#include <iostream>

int main() {
    std::cout << boost::asio::ip::address_v4::loopback() << "\n";
}
#包括
#包括
int main(){

我的问题确实很困惑,但你为我解释了一些。谢谢。
#include <boost/asio.hpp>
#include <iostream>

int main() {
    std::cout << boost::asio::ip::address_v4::loopback() << "\n";
}