【发布时间】:2017-10-31 14:22:43
【问题描述】:
我需要通过 UDP 与专用网络中的其他设备通信。我是使用 boost 的新手,但根据我在网上搜索的内容以及 Boost 网站上的教程,我想出了以下代码。我目前正在尝试从我自己的设备发送和接收数据。只是为了单元测试和最终确定代码。
问题:我无法收到任何消息。我错过了什么?
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include "boost/asio.hpp"
#include <thread>
#include <boost/array.hpp>
#include <boost/bind.hpp>
#define SRVR_UDP_PORT 10251
#define CLNT_UDP_PORT 10252
boost::array<char, 1024> recv_buffer;
void Sender(std::string in)
{
boost::asio::io_service io_service;
boost::asio::ip::udp::socket socket(io_service);
boost::asio::ip::udp::endpoint remote_endpoint;
socket.open(boost::asio::ip::udp::v4());
remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string("192.168.1.64"), SRVR_UDP_PORT);
boost::system::error_code err;
socket.send_to(boost::asio::buffer(in.c_str(), in.size()), remote_endpoint, 0, err);
socket.close();
//int i =0;
printf("Sending Payload --- \n");
}
void handle_receive(const boost::system::error_code& error, size_t bytes_transferred)
{
std::cout << "Received: '" << std::string(recv_buffer.begin(), recv_buffer.begin()+bytes_transferred) << "'\n";
}
void Receiver()
{
while(1)
{
boost::asio::io_service io_service;
boost::asio::ip::udp::socket socket(io_service);
boost::asio::ip::udp::endpoint remote_endpoint;
//socket.open(boost::asio::ip::udp::v4());
boost::system::error_code err;
remote_endpoint = boost::asio::ip::udp::endpoint(boost::asio::ip::address::from_string("192.168.1.64"), CLNT_UDP_PORT);
socket.open(boost::asio::ip::udp::v4());
//https://stackoverflow.com/questions/26820215/boost-asio-udp-client-async-receive-from-calls-handler-even-when-there-are-no-in
socket.async_receive_from(boost::asio::buffer(recv_buffer),
remote_endpoint,
boost::bind(handle_receive,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
//socket.close();
}
int i = 0;
printf("Received Payload --- %d", i);
}
int main(int argc, char *argv[])
{
//std::thread s(Sender);
std::thread r(Receiver);
//s.join();
std::string input = argv[1];
printf("Input is %s\nSending it to Sender Function...\n", input.c_str());
Sender(input);
r.join();
return 0;
}
【问题讨论】:
标签: c++ sockets boost udp boost-asio