BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)

Boost-ASIO async_receive_from function overload issue (+ dynamic pointer)

本文关键字:动态 指针 问题 功能 ASYNC RECEIVE FROM BOOST-ASIO 超载      更新时间:2023-10-16

我正在尝试使用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 函数导致错误:

严重性代码描述项目文件行抑制状态错误(Active(没有重载函数的实例" boost :: asio :: basic_datagram_socket :: async_receive_from [with protocol = boost :: asio :: asio :: asio :: ip :: udp :: udp,datagramsocketservice = boost =

我仔细检查了参考网站以及所有书籍,我相信我通过正确的论点并正确初始化了论点。什么可能导致问题?

奖金问题:

当我在这里时,我想知道在这种情况下使用动态指针是否可以接受。我需要加倍缓冲我收到的数据,以便给自己一些时间来处理上一个帧。在这种情况下, this-> buffer-> currentBufferAddr 每次接收数据后都会更改,每次都指向不同的缓冲区。

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

首先,您的参数似乎有些混淆。async_receive_fromflags参数为第三参数,而您将其作为 second

在第二部分中,您必须在所有实例中使函数静态,以使其作为处理程序或用this绑定,以便称为正确的实例。

绑定它:

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
);