【发布时间】:2010-08-02 09:19:36
【问题描述】:
我需要在我正在使用 boost ASIO 编写的 UDP 服务器中获取数据报的源 IP。 在示例 udp 数据报服务器中,行:
注意:我当前的代码与 boost asio 文档中现有的 udp 异步服务器示例相同。
socket_.async_receive_from(
boost::asio::buffer(data_, max_length), sender_endpoint_,
boost::bind(&server::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
正在传递错误和 bytes_transferred。我还需要邮件地址。
现在我知道我可以直接使用 sender_endpoint_.address().to_string(),但是我 我想把它作为参数传入。
所以我尝试将 sender_endpoint_.address() 作为参数放入。 即
socket_.async_receive_from(
boost::asio::buffer(data_, MAX_LENGTH), sender_endpoint_,
boost::bind(&server::handle_receive_from, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred,
sender_endpoint_.address()));
但是从handle_receive_from读取结果是0.0.0.0。 但是,如果我只是访问 handle_receive_from 中的 sender_endpoint_.address() 我得到 127.0.0.1 是正确的。
如何正确传递?我需要这个,因为将有多个线程调用 io_service.run() 所以来自另一个源的数据包可能会覆盖 sender_endpoint,我需要能够回复该源数据包。
【问题讨论】:
-
你能贴出你的
server类的代码吗? -
目前它与异步 udp 服务器示例相同。
标签: boost-asio