我正在尝试按照此页面中提供的步骤进行操作
http://www.boost.org/doc/libs/1_46_0/doc/html/boost_asio/tutorial/tutdaytime1.html
然而,在某些时候代码没有编译,并给我指定的错误。我无法理解它是什么样的冲突。似乎没有正确创建对象tcpsock。请检查我的代码:
io_service io_tcp;
tcp::resolver resolverObject(io_tcp);
tcp::resolver::query queryObject(argv[1], "daytime");
tcp::resolver::iterator endpoint_iterator = resolverObject.resolve(queryObject);
tcp::resolver::iterator end; //default constructor is end iterator
tcp::socket tcpsock(io_service);
boost::system::error_code socketError = boost::asio::error::host_not_found;
while (socketError && endpoint_iterator != end)
{
//Apparently, the object isn't created correctly
tcpsock.close(); //error happenes here
tcpsock.connect(*endpoint_iterator++, socketError); //error happenes here too
}
if (socketError)
throw boost::system::system_error(socketError);
感谢您的任何努力。
答案 0 :(得分:2)
您正在使用tcpsock
类型初始化io_service
,而不是使用变量io_tcp
。
答案 1 :(得分:0)
我还发现了该编译错误,但是从以下角度出发:
boost::asio::read(socket, replyBuf, boost::asio::transfer_all(), error);
与正确的相比:
boost::asio::read(*socket, replyBuf, boost::asio::transfer_all(), error);
请注意需要取消引用套接字。 似乎boost常用的基本类型可以防止常见的智能错误。
将来,我建议在运行时将null检查用于boost类型的args。