如何在boost :: asio中只读取部分udp套接字?

问题描述 投票:-1回答:1

在boost :: asio :: tcp中,我可以使用boost::asio::read只读取tcp套接字的一部分。

boost::system::error_code error;
boost::asio::streambuf len_buffer;
size_t n = boost::asio::read(tcp_socket, len_buffer, boost::asio::transfer_exactly(1), error);

boost::asio::read功能不适用于udp::socket

那么如何读取udp套接字的某些部分,例如,只读取套接字流的1个字节?

我检查了qazxsw poi函数,但它不接受长度参数。 udp socket是否支持部分读取?

c++11 boost tcp udp boost-asio
1个回答
0
投票

确切地说,receive()的第三个参数不是长度参数,它是完成条件。如果此条件为真,则中止读/写操作。 read不使用此参数,因为在使用udp::socket::receive时它是有意义的。 streambuf有3次超载,没有一次采取udp::socket::receive。所有这些都需要存储传入数据的streambuf。创建缓冲区来存储数据时,需要提供此缓冲区的大小。此大小确定将读取多少字节。因此,在您的情况下,您需要准备1字节容量的缓冲区。有很多方法可以做到,MutableBufferSequence

buffer
© www.soinside.com 2019 - 2024. All rights reserved.