【发布时间】:2014-11-12 19:29:30
【问题描述】:
我正在构建一个 tcp 客户端,它必须发送请求和读取响应,但还必须能够检测来自 tcp 服务器的传入数据,这些数据不是对请求的响应 - 服务器可以发起一个 tx/rx 序列。
保持异步读取始终处于活动状态的最佳方法是什么。我尝试了以下方法:
在我的“handle_connect”方法中,我开始异步读取和异步写入。异步读取如下所示:
size_t bytes_transferred = BUFFER_SIZE; boost::asio::async_read(m_socket, boost::asio::buffer(rcvbuf, bytes_transferred), boost::bind(&CClientSock::handle_read, 这, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));异步写入填充缓冲区,然后开始写入:
boost::asio::async_write(m_socket, boost::asio::buffer(sndbuf, request_length), boost::bind(&CClientSock::handle_write, 这, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));在异步写入处理程序中 - 它什么也不做,因为异步读取已经开始。
这不起作用。应该从服务器对客户端写入的响应中读取的数据永远不会触发异步读取处理程序。我实际上不确定写入是否会执行...
由于读取和写入未按正常顺序排队,是否可以这样做?如果我需要开始写,我是否必须开始读取,然后取消它?
【问题讨论】:
-
你能给我们展示更多相关的代码吗?目前还不清楚所有处理程序是如何实现的。
标签: c++ boost asynchronous