【发布时间】:2013-01-27 03:19:03
【问题描述】:
编辑! 只需读取该读取将阻塞,直到缓冲区已满。我到底如何接收更小的数据包而不必每次发送 1MB(我的最大缓冲区长度)? 如果我想发送任意长度的消息怎么办?
在 Java 中,您似乎可以毫无顾虑地发送一个 char 数组。但是在带有 boost 套接字的 C++ 中,我似乎要么必须继续调用socket.read(...),直到我认为我拥有一切,要么发送我的完整缓冲区长度的数据,这似乎很浪费。
关于上下文的旧原始问题。
再一次提升插座让我完全难住了。我在用
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket;我 使用 boost SSL 示例作为指导,但我有专门的线程 而不是进行异步调用。套接字的第一个
socket.read_some(...)很好,它读取 所有字节。之后它读取 1 个字节,然后读取所有其余字节 下一个socket.read_some(...)这让我很困惑。我那时 注意到 read_some 通常有这种行为。所以我搬到boost::asio::read因为套接字确实有一个成员函数 read 让我吃了一惊。但是注意到 boost::asio 有一个读取函数 需要一个套接字和缓冲区。但是它是永久阻塞的。//read blocking data method //now bytesread = boost::asio::read(socket,buffer(readBuffer, max_length)); << perminatly blocks never seems to read. //was //bytesread = socket.read_some(buffer(readBuffer, max_length)); << after the 1st read it will always read one byte and need anothersocket.read_some(...) 调用以读取其余部分。
我需要做什么才能使
boost::asio::read(...)工作?注意 .. 我使用了 wireshark 来确保服务器不是 发送分解的数据。服务器没有故障。
【问题讨论】:
标签: c++ sockets boost boost-asio