从单个远程端点读取 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 来撤消它,我想,无论如何它都有记录。
这是我接收 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 来撤消它,我想,无论如何它都有记录。