从单个远程端点读取 UDP 数据而不会丢失数据

Read UDP data from a single remote endpoint without data loss

这是我接收 UDP 数据报的方式(缩短,效果很好):

namespace ba = boost::asio;

ba::io_service _ioService;
ba::ip::udp::socket _socket(_ioService)

ba::ip::udp::endpoint senderEndpoint;

_socket.async_receive_from(ba::buffer(receiveBuffer, receiveBuffer.size()), 
    senderEndpoint, &handleReceive);

有没有办法限制我的 async_receive_from 只从一个远程 IP 地址接收数据 而不消耗数据

有一个 solution 可以读取数据,如果来自错误的远程端点则将其丢弃。我一开始就想避免阅读它。

背景:我有多个具有不同 IP 地址的客户端设备与我的应用程序通信(只有一个 IP 地址)。应用程序一次只对与一个远程客户端对话感兴趣。

只需向该 IP 地址发出 connect()。不要问我如何在 boost::asio 中做到这一点,但在 BSD 套接字级别是可能的。它会导致来自其他 IP 地址的所有数据报都被丢弃,并且还允许您使用 send() 而不是 sendto()。您可以通过连接到 INADDR_ANY 来撤消它,我想,无论如何它都有记录。