编辑!只需读取该读取将阻塞,直到缓冲区已满。我到底如何接收较小的数据包而不必每次发送 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
socket 确实有一个成员函数 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 another
socket.read_some(...) 调用以读取其余部分。
我需要做什么
boost::asio::read(...)
工作?注意 .. 我使用了 wireshark 来确保服务器没有发送破碎的数据。服务器没有故障。