我正在尝试使用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都会发生变化,每次都指向不同的缓冲区。
这是一种可以接受的做法吗?
发布于 2018-02-08 07:14:22
首先,你的参数似乎有点混乱。async_receive_from将flags参数作为第三个参数,而将其作为第二个。
对于第二部分,您必须使所有实例的函数都是静态的,以便将其作为处理程序传递,或者将其绑定到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
);https://stackoverflow.com/questions/48673558
复制相似问题