2017-03-21 12 views
0

私は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" 私は何か有用なものとして識別することはできません
  • また、私はio_serviceがいつも止まっていることを認識しましたが、私の理解では、いつも動かねばなりませんか?

私はすでにshared_from_this ptrとコールバック関数バインドでこれを参照することについて考えたが、私は私のプログラムを終了するまで、私はudp_serverクラスの実際のインスタンスを持っているので、私はそれを行うには十分な理由を考えることはできません。

誰かがこのエラーが発生したこと、これらのエラーが自分のコードについて教えていること、または私がそれらを避けるためにできることを説明することはできますか?

答えて

0

Nevermind、Rubberduckのデバッグで十分でした。私はちょうどその行を読む

しかし、私は私のプログラムを残すまで、udp_serverクラスの実際のインスタンスを持っているので、私はそれを行う良い理由を考えることはできません。

私は実際にこれを持っていなかったとこれはエラーだった。

関連する問題