我需要在使用boost ASIO编写的UDP服务器中获取数据报的源IP。 在示例udp数据报服务器行中:如何使用Boost ASIO在UDP服务器中传递源IP
注意:我当前的代码与boost asio文档中现有的udp async服务器示例相同。
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()));
但结果是从0.0.0.0读handle_receive_from时。 但是,如果我只是访问handle_receive_from 内的sender_endpoint_.address(),那么我得到127.0.0.1,这是正确的。
如何正确传递?我需要这个,因为会有多个线程调用io_service.run(),所以来自另一个源的数据包可能会覆盖sender_endpoint,并且我需要能够回复该源数据包。
你可以发布你的'服务器'类的代码吗? – 2010-08-02 15:00:48
目前它与async udp服务器示例相同。 – Matt 2010-08-02 22:01:17