我的问题是什么是当你不知道消息大小读取升压tcp套接字的最佳方式?这是一个示例。我只是把一个大小为10 代码是不同的标题,但我不觉得有必要将其列入所有boost asio读取缓冲区
///////////// 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;
}
我想如果我让发件人关闭,但只是有一个大的缓冲区,那么它可能会工作,但我会看read_untill – gda2004 2012-07-12 13:21:05