Отправка данных в сокет вызывает исключение - PullRequest
0 голосов
/ 20 июля 2011

Когда я вызываю метод start_receive () в приведенном ниже коде без вызова _outSocket.send (), метод получает данные из сокета без проблем, но когда я пытаюсь отправить данные из другого сокета, исключение повышенияброшенЯ не уверен, что является причиной проблемы, поэтому любая помощь будет отличной.

#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 Ответ

1 голос
/ 20 июля 2011

Я не уверен, что является причиной проблемы

Выдается исключение system_error, потому что метод send(), выбранный вами , выбран для использования throwsисключение, которое вы не обрабатываете.Либо обработайте исключение внутри блока try и catch, либо используйте одну из перегрузок , которые не выбрасывают.Существует множество причин возникновения любой ошибки из send, для получения дополнительной информации обратитесь к документации.

любая помощь будет отличной

Моя лучшая догадкачто вы вызываете метод send() для неподключенного сокета UDP.Возможно, вы намеревались вызвать send_to () , поскольку вы получили данные, используя receive_from(), а не receive()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...