Juk*_*rpa 2 c++ networking boost boost-asio
我试图使用boost asio的async_read()自由函数从服务器应用程序接收数据,但是我从未调用接收时设置的回调.
客户端代码是这样的:
Client::Client()
{
m_oIoService.run(); // member boost::asio::io_service
m_pSocket = new boost::asio::ip::tcp::socket(m_oIoService);
// Connection to the server
[...]
// First read
boost::asio::async_read(*m_pSocket,
boost::asio::buffer((void*)&m_oData, sizeof(m_oData)),
boost::bind(&Client::handleReceivedData, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用小数据(一个短小的字符串),我无法让它工作.当我使用同一个读取函数(boost::asio::read())使用两个相同的第一个参数时,一切都很完美.
我是否因使用io_service而遗漏了一些东西?我仍然不确定它是如何工作的.
小智 5
boost::asio::service::run ()是一个阻止电话.现在,在您的示例中,它可能会或可能不会立即返回.如果它没有,你甚至在创建套接字之前就被阻止了,并且从不调用read,所以不能指望回调.否则,退出调度循环,因此不会传递任何回调.
了解更多boost::asio::service::run ().我建议您查看文档,包括教程,示例和参考.值得深入了解这个概念.
希望能帮助到你!
PS:在旁注中,您的代码不是异常安全的.请注意,如果类的构造函数因异常而失败,则永远不会调用该类实例的析构函数.因此,至少m_pSocket如果它的类型不是"智能指针"之一,你可能会泄漏.您应该考虑使其异常安全,将代码移动到应该由用户调用的另一个方法,或者甚至使用自由函数包装此功能.
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |