这是我收到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地址)。应用程序只对一次与一个远程客户端通信感兴趣。
答案 0 :(得分:2)
只需向该IP地址发出connect()
即可。不要问我如何在boost :: asio中做到这一点,但它可以在BSD套接字级别。它会导致来自其他IP地址的所有数据报被丢弃,并且还允许您使用send()
而不是sendto()
。您可以通过连接到INADDR_ANY来撤消它,我认为,无论如何都记录了它。