我需要在使用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