【发布时间】:2018-05-22 16:17:46
【问题描述】:
我正在尝试使用 boost 库在两台主机之间创建 UDP 通信,但我不想发送/接收字符串,而是想发送 std::vector<std::complex<double> 结构。
更具体地说,我有一个更大的函数,它返回一个std::vector<std::complex<double> 类型的缓冲区。通过使用 .front() 我可以看到缓冲区中的值。问题是我想使用 buffer.front() 作为发送方函数的参数,即“auto sent = socket.send_to(boost::asio::buffer(buffer.front()), remote_endpoint, 0, err);"
如果有帮助,我附上了部分感兴趣的代码:
void Sender(std::vector<std::complex<double>> in) {
boost::asio::io_service io_service;
udp::socket socket(io_service);
udp::endpoint remote_endpoint = udp::endpoint(address::from_string(IPADDRESS), UDP_PORT);
socket.open(udp::v4());
//std::cout<<"The message is:"<< in<<std::endl;
boost::system::error_code err;
auto sent = socket.send_to(boost::asio::buffer(in), remote_endpoint, 0, err);
socket.close();
std::cout << "Sent Payload --- " << sent << "\n";
}
int main()
{.....
.....
.....
for (int i = 0; i < 20; ++i) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
Sender(buff.front());
}
我的问题在于 Sender 参数我应该有什么而不是std::vector<std::complex<double> 因为它不起作用,我收到转换错误,下一个问题是是否可以这样做,我的意思是发送这种类型的数据。
如果我尝试编译,我还附上了返回我的错误:
error: could not convert ‘input.std::vector<std::complex<double> >::front()’ from ‘__gnu_cxx::__alloc_traits<std::allocator<std::complex<double> > >::value_type {aka std::complex<double>}’ to ‘std::vector<std::complex<double> >’
Sender(input.front());
谢谢!
【问题讨论】:
-
input或buff是什么类型...从您的问题中不清楚,您要发送什么,整个向量还是仅一个元素? -
buff 是一个 std::vector<:complex>> 我只想发送一个元素。