我的问题是,当您不知道邮件大小时,读取boost tcp套接字的最佳方法是什么?这是一个样本。我只需要10的大小。 代码在不同的标题中,但我觉得不需要包含所有
///////////// hpp
typedef boost::asio::ip::tcp::resolver TResolver;
typedef boost::asio::ip::tcp::resolver::query TResolverQuery;
typedef boost::asio::ip::tcp::endpoint Tendpoint;
typedef boost::asio::ip::tcp::socket Tsocket;
typedef boost::asio::ip::tcp::acceptor Tacceptor;
#define Tsize 10
//////////// cpp
while(true)
{
cout<<"recieve"<<endl;
boost::shared_ptr< Tacceptor > acceptor(new boost::asio::ip::tcp::acceptor(*m_io_service));
boost::system::error_code ec;
TResolverQuery query(this->getHost(), boost::lexical_cast< std::string >( this->getPort() ));
TResolver resolver( *m_io_service );
Tendpoint endpoint = *resolver.resolve( query );
acceptor->open( endpoint.protocol() );
acceptor->set_option( boost::asio::ip::tcp::acceptor::reuse_address( true ) );
acceptor->bind( endpoint );
acceptor->listen();
boost::shared_ptr< Tsocket > socknew(new Tsocket( *m_io_service ));
acceptor->accept( *socknew,endpoint);
boost::array<char, Tsize> buf;
boost::asio::read(*socknew,boost::asio::buffer(buf), ec);
cout.write(buf.data(),Tsize);cout << std::endl;
socknew->shutdown( boost::asio::ip::tcp::socket::shutdown_both, ec );
cout<<"threadId "<< boost::this_thread::get_id()<<endl;
}
答案 0 :(得分:2)
两种最常用的方法是使用包含消息长度或具有消息结束标记的协议。
答案 1 :(得分:0)
我找到了一个问题的解决方案,即我可以使用一段时间而不是eof来读取套接字和push_back在一个有效的向量上。我可以在这里创建一个wiki作为参考点。