- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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_from
将 flags
参数作为第三个参数,而您将其作为第二个。
对于第二部分,您必须将所有实例的函数设为静态以便将其作为处理程序传递,或者将其与 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/
对于通过 UDP 进行的一些数据传输,我使用了来自 boost 的 async_receive_from 函数。我的接收函数是 udp::socket socket_;
在我发现的所有样本中,我看不到任何缓冲。这是否意味着在处理程序中我总是收到完整的消息?没有分块。 我在文档中找不到任何答案。 Is boost::asio::ip::udp::socket::asyn
下面从真实代码库简化而来的 MVCE 显示了同样的问题。 服务器连续发送 5 个 UDP 帧的“突发”,其中填充了 150 个字节的值 0xA5,中间有很小的延迟或没有延迟。暂停 1 秒。 客户端使用
我在 udp_server 类中创建了异步函数 start_receive() 和 start_send()。但是通过代码不会停止并等待“async_receive_from”行。这是我的代码; cl
我正在使用 async_receive_from 读取多播输入。所以我的想法是,当我检测到间隙时,我将通知另一个帮助线程请求/获取间隙填充消息。虽然这是在工作中,但主线程将继续接收和排队任何传入的消息
在下面的代码中,asynch_receive_from 的行为是同步的。在收到数据之前它不会返回。查看最后的日志表明了这一点。这可能不是那个一开始很明显,因为有相当高的数据传入率。但是当没有数据时,只
我正在使用 boost::asio 来捕获 udp 端口上的数据包。我只是新来的。如何使 async_receive_from 复制数据以仅缓冲具有指定源 ip 的数据包? 最佳答案 根据您所说的
我有一个 boost 套接字,我在上面定义了一个异步接收: void recv() { boost_socket->async_receive_from( boost::asio::buf
class UDP_Receiver { public: udp_receiver((boost::asio::io_service& io_service) : idle_work_
我尝试使用 async_receive_from 方法来获取数据。但是当我开始时,程序不会等待超时或正在读取某些内容。我知道数据正在端口(wireshark)上传入。这可能是什么原因。我尝试使用来自
我有一个设置,多个对等方每 200 毫秒 (5fps) 广播一次 udp 数据包(包含图像)。 虽然接收本地流作为外部流在 Windows 下工作正常,但相同的代码(除了 Windows XP 中的
我正在尝试使用 Boost 库创建一个简单的异步接收器。我遵循了示例和书籍,这就是我到目前为止能够做到的: class networkUDPClient { public: utilityTr
基本上: void start_receive() { socket_.async_receive_from( boost::asio::buffer(recv_buf
我正在尝试使用 3 次握手建立异步连接。在代码的底部有一个 main 方法,它接受一个参数来确定它是充当客户端还是服务器。 如果它充当服务器,它会创建一个套接字并等待它接收到数据,然后调用回调函数 m
Boost asio 专门允许多个线程调用 io_service 上的 run() 方法。这似乎是创建多线程 UDP 服务器的好方法。但是,我遇到了一个问题,我正在努力寻找答案。 查看典型的 asyn
我有一个相当大的应用程序,可以在 Linux 上正常运行。我最近使用 VC2012 和 boost asio 1.52 在 Windows 7 上编译它并遇到了一个奇怪的问题: async_recei
我正在使用 boost::asio 创建服务器应用程序,特别是 UDP API。现在我从一个池中启动多个线程,使用 async_receive_from 监听单独的缓冲区。这在我主要开发的 Ubunt
我想创建一个自治线程,专门用于使用 boost 库 (asio) 从 UDP 套接字接收数据。这个线程应该是一个无限循环,由从 UDP 套接字接收到的一些数据触发。在我的应用程序中,我需要使用异步接收
int main() { boost::asio::io_service io_service; Worker ob1(&io_service); ob1.AsyncRead(); i
我已将 Boost 白天客户端教程中的 UDP 客户端代码修改为以下内容: class UDPClient { public: udp::socket* socket; udp::en
我是一名优秀的程序员,十分优秀!