2013-03-06 3 views
1

내 서버가 다음 실행되는 코드 : 예외 부스트 부스트 :: 직렬화를 사용하여 :: ASIO

boost::asio::streambuf streambuf; 
std::istream istream(&streambuf); 
boost::archive::xml_iarchive xml_iarchive(istream); 
boost::asio::read_until(socket_, streambuf, '\n'); 

서버가 내가 연결 실행중인 다른 컴퓨터에서 텔넷을 경쟁

. 연결이 설정되면 즉시 연결이 닫히고 다음과 같은 예외가 발생하여 서버가 중단됩니다.

terminate called after throwing an instance of 'boost::archive::xml_archive_exception' 
    what(): unrecognized XML syntax 

위의 코드 조각은 어디에서 실패합니까? 수동으로 XML 문자열을 입력하기 전에 텔넷 세션이 '\ n'을 보내고있는 것 같습니다.

+0

어떤 줄에서 예외가 발생합니까? –

+0

boost :: archive :: xml_iarchive xml_iarchive (istream); – user1587451

답변

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 

이 부스트 함께 할 수 없다 .Asio, 유효한 XML이 아닌 빈 버퍼를 deserialize하려고합니다. 이 문제를 해결하려면 소켓에서 버퍼로 읽어 들일 때까지 역 직렬화를 지연하십시오.

boost::asio::read_until(socket_, streambuf, '\n'); 
std::istream istream(&streambuf); 
boost::archive::xml_iarchive xml_iarchive(istream);