gpt4 book ai didi

c++ - socket.connect 和 boost::asio::connect 之间的区别

转载 作者:可可西里 更新时间:2023-11-01 02:30:18 25 4
gpt4 key购买 nike

我正在使用 boost::asio 进行网络通信,我想知道为什么在示例中有时是 socket.connect(endpoint) 而有时是 boost::asio使用::connect(socket, endpoint)。根据代码,boost::asio::connect 在循环中为端点迭代器调用 socket.connect。所以我的问题是:

哪个行为更好? 使用 boost::asio::connect 还是 socket.connect?我个人更喜欢 socket.connect,因为我只有一个端点。或者我可能错了,误解了 asio 库。

我的第二个问题是,为什么端点是一个迭代器?当给定 1 个 ip 和 1 个端口时,怎么可能有多个连接?

还有一个 boost::asio::write 和 socket.write...

例子是:

  1. boost::asio::connect(socket, endpoint) blocking_tcp_echo_client.cpp .
  2. socket.connect(endpoint)(有点旧但仍在工作)Daytime.1

最佳答案

boost::asio::connect() 是一个更高级别的自由函数,它将调用 boost::asio::ip::tcp::socket::connect()documentation这里很清楚

This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's connect member function, once for each endpoint in the sequence, until a connection is successfully established.

两者都没有更好的行为,尽管这在很大程度上是一个主观术语。如何处理连接建立取决于您和您的应用程序。如果您需要向用户提供某种反馈,例如:“attempting to connect to host 1 of 10”,最好使用 socket.connect()在一个循环中而不是 connect() 自由函数。

connect() 自由函数采用端点迭代器,因此它可以连接到已解析的所有可能端点。您链接到的 tcp echo 客户端执行此操作

tcp::resolver resolver(io_service);
tcp::resolver::query query(tcp::v4(), argv[1], argv[2]);
tcp::resolver::iterator iterator = resolver.resolve(query);

tcp::socket s(io_service);
boost::asio::connect(s, iterator);

关于c++ - socket.connect 和 boost::asio::connect 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com