将数据发送到套接字会导致异常

时间:2011-07-20 17:56:10

标签: c++ boost-asio

当我在没有_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));

}

1 个答案:

答案 0 :(得分:1)

  

我不确定是什么导致了这个问题

抛出system_error异常,因为send()方法chosen to use会抛出您未处理的异常。处理trycatch块内的异常,或使用不抛出的overloads之一。 send出现任何错误情况的原因有多种,请参阅文档以获取更多信息。

  

任何帮助都会很棒

我最好的猜测是你在未连接的UDP套接字上调用send()方法。也许您打算调用send_to(),因为您使用receive_from()而不是receive()收到了数据?