【发布时间】:2015-02-18 13:56:21
【问题描述】:
我正在开发一个服务器/客户端应用程序。客户端向服务器发送消息(标头+正文)。服务器接收到消息,进行一些修改并将其发回。
所以客户端发送消息。
async_write (m_socket,boost::asio::buffer(msg -> HeaderData() , msg -> SendLength ()),
boost::bind ( &Client::HandleSentMessage , this ,
boost::asio::placeholders::error , boost::asio::placeholders::bytes_transferred));
服务器收到消息。
m_socket.async_read_some ( boost::asio::buffer ( *receiveBuffer ) , boost::bind(
&ASyncConnectionMT::HandleReceived , shared_from_this() , receiveBuffer ,
boost::asio::placeholders::error , boost::asio::placeholders::bytes_transferred));
这是我的功能:
void HandleReceived ( BufferPtr receiveBuffer , const boost::system::error_code& ec , size_t size)
它会更改收到的消息。
for ( size_t i=0 ; i!=size ; i++ )
{
((*sendBuffer)[i]) = toupper((*receiveBuffer)[i]);
}
然后发回。
async_write ( m_socket, boost::asio::buffer ( *sendBuffer , size ) , m_strand.wrap(
boost::bind ( &ASyncConnectionMT::HandleSent ,shared_from_this() , sendBuffer,
boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));
到目前为止一切都很好。代码运行完美。但我的问题是什么。我收到发送消息并对其进行修改,但是,例如,我想发回其他内容。例如一个字符串。
问题是我必须将缓冲区作为shared_ptr 传递,这样我的对象在离开这个函数后就不会被破坏。
typedef boost::array < char , 65536 > Buffer;
typedef boost::shared_ptr < Buffer > BufferPtr;
BufferPtr receiveBuffer ( new Buffer ) ;
BufferPtr sendBuffer ( new Buffer ) ;
我希望客户端向我发送一条消息,例如“我准备好了”,并让服务器发回一些信息。客户端收到信息后,向客户端发送一条新消息,表示他已准备好。所以服务器可以发送下一条信息。尝试了一整天,我只是不知道如何向客户端发送字符串或字符数组。
你能告诉我如何发送字符串或字符数组或将它们转换为 shared_ptr 吗?
【问题讨论】:
-
到目前为止,我只能通过缓冲区提供 shared_ptr 缓冲区值。 boost::array Buf 和 for (int i = 0 ; i