c++ - boost asio 读缓冲区

标签 c++ sockets boost boost-asio

我的问题是,当您不知道消息大小时,读取 boost tcp 套接字的最佳方法是什么?这是一个样本。我简单地设置了 10 的大小。 代码位于不同的 header 中,但我认为不需要全部包含

/////////////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;        
}

最佳答案

两种最常见的方法是使用包含消息长度或具有消息结束标记的协议(protocol)。

关于c++ - boost asio 读缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11449623/

相关文章:

c++ - 具有 C++ 基类的 Python 子类

c++ - 构造具有多重继承的类

c++ - 不访问成员数据的成员函数,以及封装、耦合和内聚

php - 连接到 Flash Socket 时排队的 Ajax 调用

c++ - 尽可能使用 boost::scoped_ptr

c++ - 具有空值和自定义删除器的 shared_ptr 奇怪

java - 如何通过java socket编程开发客户端-服务器订座程序?

python - 为什么我从套接字接收一个字符串,直到 python 中的\n 换行符转义序列?

iphone - 在发布版本中,Boost.Thread 线程未在 iPhone/iPad 上启动

c++ - 使用 boost::spirit 读取空值