首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost-ASIO async_receive_from函数过载问题(+动态指针)

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

Stack Overflow用户
提问于 2018-02-07 21:29:14
回答 1查看 862关注 0票数 1

我正在尝试使用Boost库创建一个简单的异步接收器。我学习了这些例子和书籍,到目前为止我还能做这些:

代码语言:javascript
复制
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都会发生变化,每次都指向不同的缓冲区。

这是一种可以接受的做法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-08 07:14:22

首先,你的参数似乎有点混乱。async_receive_fromflags参数作为第三个参数,而将其作为第二个

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

绑住它:

代码语言:javascript
复制
socket.async_receive_from
(
    boost::asio::buffer(buffer.data(), buffer.size()),
    senderEndpoint,
    0,
    std::bind(&readCallback, this, std::placeholders::_1, std::placeholders::_2)
);

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

代码语言:javascript
复制
socket.async_receive_from
(
    boost::asio::buffer(buffer.data(), buffer.size()),
    senderEndpoint,
    0,
    readCallback
);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48673558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档