私はUDPサーバーをboost/asioで設定しました(私はthe exampleをコピーして、いくつか変更しました)。以下のコードです:操作がキャンセルされましたasio async_receive_from
try {
udp_server server(io_service, ApplData.PORT, (size_t)ApplData.BUFLEN);
} catch (std::exception& e) {
// error handling
}
し、それを実行する:してサーバーを初期化した後
udp_server.hpp
using boost::asio::ip::udp;
class udp_server {
public:
udp_server(boost::asio::io_service&, int);
private:
boost::array<char, 256> recBuffer;
udp::socket socket_;
udp::endpoint remote_endpoint_;
void start_receive();
void handle_receive(const boost::system::error_code&, std::size_t);
void handle_send(boost::shared_ptr<std::string> /*message*/,
const boost::system::error_code& /*error*/,
std::size_t /*bytes_transferred*/)
{}
};
とudp_server.cpp
udp_server::udp_server(boost::asio::io_service& io_service,
int port)
: socket_(io_service, udp::endpoint(udp::v4(), port)) {
serverNotifications.push_back("UDP Server class initialized.");
start_receive();
}
void udp_server::start_receive() {
socket_.async_receive_from(
boost::asio::buffer(recBuffer),
remote_endpoint_,
boost::bind(&udp_server::handle_receive,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
serverNotifications.push_back("Starting to receive UDP Messages.");
}
void udp_server::handle_receive(const boost::system::error_code& error,
std::size_t size) {
serverNotifications.push_back("RecFrom: " + remote_endpoint_.address().to_string());
if (!error) {
// I do data stuff here
} else {
errors.push_back("Handle Receive error: " + error.message());
}
}
w
- 私のコールバック関数
handle_receive
- (接続なし別名だけ私のラップトップを)ネットワーク全体に送信取得任意のUDPメッセージなしで呼び出されます:i番目の別の関数で別々のトライキャッチで
io_service.run()
私はいくつかの問題を取得しますerror.message()
戻り remote_endpoint_.address().to_string()
リターンを "操作がキャンセル" "ACFC:4000:0:0:7800 ::%2885986016" 私は何か有用なものとして識別することはできません
- (接続なし別名だけ私のラップトップを)ネットワーク全体に送信取得任意のUDPメッセージなしで呼び出されます:i番目の別の関数で別々のトライキャッチで
- また、私は
io_service
がいつも止まっていることを認識しましたが、私の理解では、いつも動かねばなりませんか?
私はすでにshared_from_this ptr
とコールバック関数バインドでこれを参照することについて考えたが、私は私のプログラムを終了するまで、私はudp_server
クラスの実際のインスタンスを持っているので、私はそれを行うには十分な理由を考えることはできません。
誰かがこのエラーが発生したこと、これらのエラーが自分のコードについて教えていること、または私がそれらを避けるためにできることを説明することはできますか?