2011-07-20 20 views
0

_outSocket.send()呼び出しを使わずに以下のコードでstart_receive()メソッドを呼び出すと、メソッドは問題なくソケットからデータを受信しますが、データが別のソケットに出力されると、ブースト例外がスローされます。私は何が原因で問題が起こっているのか分からないので、どんな助けも素晴らしいだろう。ソケットにデータを送信すると例外が発生する

#include "dataproxy.h" 
#include <boost/bind.hpp> 
#include <cstdlib> 

using namespace boost::asio; 

DataProxy::DataProxy(boost::asio::io_service& ioserv) 
: _inSocket(ioserv, ip::udp::endpoint(ip::udp::v4(), 5004)) 
,_outSocket(ioserv, ip::udp::endpoint(ip::udp::v4(), 5005)) 
{ 
} 

DataProxy::~DataProxy() 
{ 

} 

void DataProxy::start(){ 
    QThread::start(); 
} 

void DataProxy::run() 
{ 
    while(true) 
    { 
     start_receive(); 
    } 
} 

void DataProxy::start_receive() 
{ 
    /*_inSocket.async_receive_from(
    boost::asio::buffer(_inBuffer), _videoEndpoint, 
    boost::bind(&DataProxy::handleIncomingData, this, 
    boost::asio::placeholders::error, 
     boost::asio::placeholders::bytes_transferred)); 
    */ 
    size_t reply_length = _inSocket.receive_from(
     boost::asio::buffer(_inBuffer), _dataSourceEndpoint); 

    std::cout << "Received " << reply_length << " bytes" << std::endl; 

    //This is the line that causes the exception 
    size_t send_length = _outSocket.send(boost::asio::buffer(_inBuffer)); 

} 
+0

例外のエラーメッセージは何ですか? – nabulke

+0

const boost :: system :: error_code&exをキャッチしようとしましたが、 "RVT.exeの0x76e4b727で未処理の例外が発生しました。メモリの0x04f0f634 ..のブースト::システム::システムエラー.." – Slruh

+0

タイプは '_inBuffer'ですか? 'send()'で 'buffer'をインスタンス化するときに' reply_length'を含めてみましたか? –

答えて

1

は、私はあなたが持っているchosen to usesend()方法は、あなたが処理していない例外がスローされますので、system_error例外がスローされている問題

を引き起こしているかわからないんだけど。 trycatchブロック内の例外を処理するか、スローしないoverloadsのいずれかを使用してください。 sendのエラー条件にはさまざまな理由がありますが、詳細についてはドキュメントを参照してください。

任意のヘルプは素晴らしいことだ

私の最高の推測では、あなたが接続されていないUDPソケットにsend()メソッドを呼び出しているということです。おそらくsend_to()を呼び出しようとしたのは、ではなくreceive_from()を使用してデータを受信したからでしょうか?

関連する問題