gpt4 book ai didi

c++ - 解析函数在 boost/asio 中不起作用

转载 作者:太空狗 更新时间:2023-10-29 23:47:54 25 4
gpt4 key购买 nike

我正在学习 boost/asio 并编写电子书中的示例程序。当然没用 ;)

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

int main () {
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver::query query("www.boost.org", "http");
boost::asio::ip::tcp::resolver::iterator destination = boost::asio::ip::tcp::resolver::resolve(query); // if i have "." before "resolve" as in books example compilers says i need primary-expresion.
boost::asio::ip::tcp::endpoint endpoint;

while ( destination != end ) {
endpoint = *destination++;
std::cout<<endpoint<<std::endl;
}

boost::asio::ip::tcp::socket socket(io_service);
socket.connect(endpoint);
return 0;
}

在“resolve”之前带有“::”的编译器输出:

/home/martins/C++/boost_asio_client/client.cpp|7|error: cannot call member function 
‘boost::asio::ip::basic_resolver<InternetProtocol, ResolverService>::iterator
boost::asio::ip::basic_resolver<InternetProtocol,
ResolverService>::resolve(boost::asio::ip::basic_resolver<InternetProtocol,
ResolverService>::query&)
[with InternetProtocol = boost::asio::ip::tcp, ResolverService =
boost::asio::ip::resolver_service<boost::asio::ip::tcp>,
boost::asio::ip::basic_resolver<InternetProtocol, ResolverService>::iterator =
boost::asio::ip::basic_resolver_iterator<boost::asio::ip::tcp>,
boost::asio::ip::basic_resolver<InternetProtocol, ResolverService>::query =
boost::asio::ip::basic_resolver_query<boost::asio::ip::tcp>]’ without object|

如何正确解析地址?

最佳答案

您需要一个解析器 对象。此外,您的迭代器比较不正确,您需要与标记值 ip::tcp::resolver::iterator() 进行比较。

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

int main () {
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver::query query("www.boost.org", "http");
boost::asio::ip::tcp::resolver resolver( io_service );
boost::asio::ip::tcp::resolver::iterator destination = resolver.resolve(query);
boost::asio::ip::tcp::endpoint endpoint;

while ( destination != boost::asio::ip::tcp::resolver::iterator() ) {
endpoint = *destination++;
std::cout<<endpoint<<std::endl;
}

boost::asio::ip::tcp::socket socket(io_service);
socket.connect(endpoint);
return 0;
}

这里是您的代码的示例编译和运行。

samm@macmini ~> g++ -lboost_system resolve.cc
samm@macmini ~> ./a.out
129.79.245.252:80
samm@macmini ~> echo $?
0
samm@macmini ~>

关于c++ - 解析函数在 boost/asio 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310025/

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