gpt4 book ai didi

c++ - Boost-ASIO async_receive_from 函数过载问题(+动态指针)

转载 作者:行者123 更新时间:2023-11-30 03:25:57 42 4
gpt4 key购买 nike

我正在尝试使用 Boost 库创建一个简单的异步接收器。我遵循了示例和书籍,这就是我到目前为止能够做到的:

class networkUDPClient {
public:
utilityTripleBuffer * buffer;

char testBuffer[20] = { 0 };

const char * hostAddress;
unsigned int port;

boost::asio::io_service service;
boost::asio::ip::udp::socket socket;
boost::asio::ip::udp::endpoint listenerEndpoint;
boost::asio::ip::udp::endpoint senderEndpoint;

// Function Definitions
void readCallback(const boost::system::error_code & err, std::size_t read_bytes) {

}

// Constructors
networkUDPClient(const char * hostAddress, unsigned int port, unsigned int bufferSize) :
socket(service),
listenerEndpoint(boost::asio::ip::address_v4::from_string(hostAddress), port)
{
this->buffer = new utilityTripleBuffer(bufferSize, nullptr);

this->hostAddress = hostAddress;
this->port = port;

socket.open(this->listenerEndpoint.protocol());
socket.set_option(boost::asio::ip::udp::socket::reuse_address(true));
socket.bind(this->listenerEndpoint);
socket.async_receive_from(boost::asio::buffer(this->buffer->currentBufferAddr, this->buffer->bufferSize), 0, senderEndpoint, readCallback);
service.run();
};
~networkUDPClient()
{
service.stop();

delete this->buffer;
};
};

问题是 async_receive_from 函数导致错误:

严重性代码描述项目文件行抑制状态错误(事件)没有重载函数实例“boost::asio::basic_datagram_socket::async_receive_from [with Protocol=boost::asio::ip::udp, DatagramSocketService=boost::asio::datagram_socket_service

我仔细检查了引用网站和我所有的书,我相信我传递了正确的参数并正确地初始化了它们。是什么导致了这个问题?

奖励问题:

虽然我在这里,但我想知道在这种情况下使用动态指针是否可以接受。我需要对接收到的数据进行双重缓冲,以便给自己一些时间来处理前一帧。在这种情况下,this->buffer->currentBufferAddr 将在每次接收数据后发生变化,每次都指向不同的缓冲区。

这是一种可以接受的做事方式吗?

最佳答案

首先,您的参数似乎有点困惑。 async_receive_fromflags 参数作为第三个参数,而您将其作为第二个

对于第二部分,您必须将所有实例的函数设为静态以便将其作为处理程序传递,或者将其与 this 绑定(bind)以便调用正确的实例。

绑定(bind)它:

socket.async_receive_from
(
boost::asio::buffer(buffer.data(), buffer.size()),
senderEndpoint,
0,
std::bind(&readCallback, this, std::placeholders::_1, std::placeholders::_2)
);

或者如果您将 readCallback 设为静态:

socket.async_receive_from
(
boost::asio::buffer(buffer.data(), buffer.size()),
senderEndpoint,
0,
readCallback
);

关于c++ - Boost-ASIO async_receive_from 函数过载问题(+动态指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673558/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com