当我在没有_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 :(得分:1)
我不确定是什么导致了这个问题
抛出system_error
异常,因为send()
方法chosen to use会抛出您未处理的异常。处理try
和catch
块内的异常,或使用不抛出的overloads之一。 send
出现任何错误情况的原因有多种,请参阅文档以获取更多信息。
任何帮助都会很棒
我最好的猜测是你在未连接的UDP套接字上调用send()
方法。也许您打算调用send_to(),因为您使用receive_from()
而不是receive()
收到了数据?