xin*_*ose 0 c++ boost udp arduino boost-asio
我使用Boost ASIO通过以太网连接到带有以太网屏蔽的Arduino Nano.这是Arduino设置:
#include <EtherCard.h>
ether.staticSetup("10.0.0.4", "10.0.0.1");
ether.udpServerListenOnPort(&callback_function, 1337);
Run Code Online (Sandbox Code Playgroud)
这是我连接到它的C++代码:
头
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/system/error_code.hpp>
#include <boost/system/system_error.hpp>
boost::system::error_code error_1;
boost::shared_ptr <boost::asio::io_service> io_service_1;
boost::shared_ptr <boost::asio::ip::udp::socket> socket_1;
Run Code Online (Sandbox Code Playgroud)
初始化
// 1. reset io service
io_service_1.reset();
io_service_1 = boost::make_shared <boost::asio::io_service> ();
// 2. create endpoint
boost::asio::ip::udp::endpoint remote_endpoint(
boost::asio::ip::address::from_string("10.0.0.4"),
1337
);
// 3. reset socket
socket_1.reset(new boost::asio::ip::udp::socket(*io_service_1));
// 4. connect socket
socket_1->async_connect(remote_endpoint, socket_1_connect_callback);
// 5. start io_service_1 run thread after giving it work
boost::thread t(boost::bind(&boost::asio::io_service::run, *&io_service_1));
Run Code Online (Sandbox Code Playgroud)
打回来
function socket_1_connect_callback (const boost::system::error_code& error_1)
{
// 1. check for errors
if (error_1)
{
std::cerr << "error_1.message() >> " << error_1.message().c_str() << std::endl;
return;
}
else
{
INFO << "connection succeeded";
}
return;
}
Run Code Online (Sandbox Code Playgroud)
即使Arduino未通电,套接字也会每次都连接.为什么连接失败?
根据定义,UDP是无连接协议."连接"UDP套接字只是一种简便的操作,它允许您在不指定收件人的情况下在该套接字上发送数据报 - 它使用您为连接调用提供的数据报.
但除此之外,它什么也没做.除非您自己实施请求/响应方案,否则无法检查是否有人在UDP的另一端进行侦听.
您正在使用Boost.Asio这一事实对此基本事实没有任何帮助.
| 归档时间: |
|
| 查看次数: |
242 次 |
| 最近记录: |