我的服务器运行以下代码:
boost::asio::streambuf streambuf;
std::istream istream(&streambuf);
boost::archive::xml_iarchive xml_iarchive(istream);
boost::asio::read_until(socket_, streambuf, '\n');
当服务器启动并运行时,我从另一台机器连接vie telnet。建立连接后,连接立即关闭,服务器崩溃,出现以下异常:
terminate called after throwing an instance of 'boost::archive::xml_archive_exception'
what(): unrecognized XML syntax
上面的代码段失败在哪里?在我手动输入一些XML字符串之前,我认为telnet会话正在发送'\ n'。
答案 0 :(得分:4)
您没有发布sscce,因此我为您创建了一个
#include <boost/asio.hpp>
#include <boost/archive/xml_iarchive.hpp>
int
main()
{
try {
boost::asio::streambuf streambuf;
std::istream istream(&streambuf);
boost::archive::xml_iarchive xml_iarchive(istream);
} catch ( const std::exception& e ) {
std::cerr << e.what() << std::endl;
}
}
正如预期的那样,从第10行抛出异常:
samm$ ./a.out
unrecognized XML syntax
这与Boost.Asio无关,你试图反序列化一个空缓冲区,这是一个无效的XML。要解决此问题,请延迟反序列化,直到从套接字读入缓冲区
boost::asio::read_until(socket_, streambuf, '\n');
std::istream istream(&streambuf);
boost::archive::xml_iarchive xml_iarchive(istream);