【问题标题】:Read only desired amount of bytes using Boost.Asio使用 Boost.Asio 只读所需的字节数
【发布时间】:2013-03-14 17:33:51
【问题描述】:

我只是创建了一个非常简单的 C++ 类,它为我提供了一些方法,例如 connect()read(),而不是公开所有 Boost.Asio 套接字调用。

现在,我正在尝试找出如何创建一个只读取所需字节数的方法:

SocketClient::read(int bytes, char* data); //reads desired amount of bytes and puts them in data, size of data>bytes!

不幸的是,我在 Boost.Asio 中没有找到 read_byte 函数。我不想丢弃已收到但尚未读取的字节。

Here is my class.

【问题讨论】:

  • 从文档中,我不阅读的数据会发生什么并不明显。我需要读取字节数。确切的数字。不多。不低于。如果少了,函数就会阻塞。 如果我需要的更多,会发生什么?
  • 为什么你不能只使用你自己的内部缓冲机制?读取可用的内容,如果 $bytes 字节数可用,则返回那么多字节,否则读取更多。

标签: c++ sockets boost boost-asio


【解决方案1】:

read 函数似乎正好提供了您所需要的:

该函数用于从一个 溪流。调用将阻塞,直到满足以下条件之一 真的:

- The supplied buffers are full. That is, the bytes transferred
  is equal to the sum of the buffer sizes.
- An error occurred.

示例用法:

boost::asio::read(stream, boost::asio::buffer(data, size));

【讨论】:

  • 从哪里获取数据流?那是tcp::socket 的成员吗?或者我可以在这里使用socket 的实例吗?
  • 是的,可以直接使用socket。任何支持SyncReadStream概念的都可以在这里使用
  • 我已经实现了相同的,但有些如何它没有返回实际结果并且请求被挂起。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 2014-06-24
  • 2019-04-05
  • 1970-01-01
  • 2015-11-28
相关资源
最近更新 更多