BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)
Boost-ASIO async_receive_from function overload issue (+ dynamic pointer)
我正在尝试使用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_from
的flags
参数为第三参数,而您将其作为 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
);
相关文章:
- 如果非动态变量被指针引用,何时超出范围?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 指针的 C++ 动态数组 - 何时需要使用它?
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 指针类型类成员的动态强制转换的恒定性是什么?
- 删除包含包含动态对象的 STL 容器的智能指针
- 带有模板问题的指针的动态数组
- 存储指向动态数组元素的指针
- 动态指针引用数组由三元运算符返回值,但有异常
- BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)
- 使用动态指针数组进行动态对象分配 - 使用什么删除?
- 删除静态/动态指针后无法重新分配内存
- 动态指针赋值c++
- 是否将动态指针设置为null
- 动态指针和对象
- C++将动态指针传递给 2D 数组
- 如何使用动态指针和智能指针更改变量的值
- c++ 2维静态数组兼容2维动态指针
- c++:删除不同的静态和动态指针类型
- wchar_t **WinList 动态指针数组到字符数组