Boost Android Asio连接错误

Boost Android Asio连接错误,android,c++,boost,boost-asio,Android,C++,Boost,Boost Asio,我正在使用Boost Asio进行跨平台联网。我尝试过各种连接方法,当我尝试连接到Android上的套接字时,总是会出现“Element not found”asio.misc错误。我很困惑,因为这是在成功解析域名之后发生的。例如,如果我为主机和端口80输入google.com,那么解析器将打印出所有20多个google服务器,但稍后它将不会连接,并说asio.misc“Element not found” 这是我的密码: boost::asio::io_service service;

我正在使用Boost Asio进行跨平台联网。我尝试过各种连接方法,当我尝试连接到Android上的套接字时,总是会出现“Element not found”asio.misc错误。我很困惑,因为这是在成功解析域名之后发生的。例如,如果我为主机和端口80输入google.com,那么解析器将打印出所有20多个google服务器,但稍后它将不会连接,并说asio.misc“Element not found”

这是我的密码:

    boost::asio::io_service service;
    boost::system::error_code ec;
    boost::asio::ip::tcp::resolver resolver(service);
    boost::asio::ip::tcp::resolver::query query(host, port);
    boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query, ec);
    boost::asio::ip::tcp::resolver::iterator iterEnd;
    boost::asio::ip::tcp::endpoint ep;
    int it = 0;
    while(iter != iterEnd)
    {
        ep = *iter++;
        debug+="\nLooking at resolve with address " + ep.address().to_string();
        it++;
    }

        //Try to connect through asio
        boost::asio::ip::tcp::socket sock( service );
        //asio::connect does all the iterator work for us.
        boost::asio::connect(sock, iter, ec);

        if( ec )
        {
            return new string("Should be connected but I can't");
        }
        else
        {
            debug+= "\n     " + ec.message() + "\n     " + ec.category().name();
            return debug;
        }

调试循环正在耗尽迭代器,导致使用结束迭代器调用

boost::asio::ip::tcp::resolver::iterator iter=resolver.resolve(查询,ec);
while(iter!=iterEnd)//迭代到耗尽
{
ep=*iter++;
// ...      
}
// ...
boost::asio::connect(sock、iter、ec);//使用穷举迭代器

解决此问题时,考虑通过更改:

建立调试信息时,重复<代码> ITER < /代码>的副本。
while(iter!=iterEnd)
{
ep=*iter++;
// ...      
}
致:

for(tcp::resolver::iterator i=iter,end;i!=end;++i)
{
ep=*i;
// ...
}

下面是一个大致基于原始代码的完整示例,它演示了不同之处:

#包括
#包括
无效连接(常量字符*地址、常量字符*端口、布尔排气)
{
使用boost::asio::ip::tcp;
boost::asio::io_服务io_服务;
tcp::解析器解析器(io_服务);
tcp::resolver::iterator iterator=resolver.resolve(
tcp::resolver::query(地址、端口));
//如果设置了标志,则耗尽迭代器。
如果(排气)
{

std::您是否具有访问internet所需的权限?是的,我有。它将域名解析为正确的ip地址,因此我知道我设置了它。您如何调用
服务
?post()或bind()。这样做很有效,这种迭代方式看起来很奇怪,但它在他们的网站上,在一些参考中,并且在iOS中工作。谢谢!