作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
情况:我正在运行一个异步 TCP 服务器,其中必须有来自客户端的多个同时连接。在这个特定问题中,我有一个名为 tcp_menu_id_receive()
的函数,它接收并返回客户端发送的数值。
问题:函数不等待 async_read_some() 并立即返回默认值。
int tcp_menu_id_receive()
{
auto self(shared_from_this());
int menuid = 0;
socket_.async_read_some(boost::asio::buffer(data_, max_length), [this, self, &menuid](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
std::string ReceivedData(data_, data_ + length);
menuid = std::stoi(ReceivedData);
std::cout << "!ec menuid: " << menuid << std::endl;
}
});
std::cout << "non !ec menuid: " << menuid << std::endl;
return menuid;
}
问题:如何获取`tcp_menu_id_receive'来等待客户端的数据?
最佳答案
这实际上是 async_read_some
应该做的。它会立即返回给调用者,因为它是一个异步调用。稍后,回调 函数将在事件发生时被调用 - io_service
实际上会管理它。
我相信您想使用同步读取的非异步读取,这就是 basic_stream_socket::read_some
方法。
关于c++ - 我如何在 Boost ASIO 中获得等待 async_read_some 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47408129/
我是一名优秀的程序员,十分优秀!