boost::asio使用UDP协议通信源码实现

时间:2022-09-08 23:22:12

说明:以下源码来自参考文献[1], 比原文更丰富, 更有指导意义, 方便日后参考.

udp servr端源码

//g++ -g udp_server.cpp -o udp_server -lboost_system
//

#include <iostream>
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>

using namespace std;
using namespace boost::asio;

int main(){
try{
cout << "udp server start ......" << endl;
io_service ios;

ip::udp::socket sock(ios, ip::udp::endpoint(ip::udp::v4(), 6699));

while(true){
char buf[1];
ip::udp::endpoint ep;
boost::system::error_code ec;
sock.receive_from(buffer(buf), ep, 0, ec);

if(ec && ec!=error::message_size){
throw boost::system::system_error(ec);
}

cout << "send to " << ep.address() << endl;
sock.send_to(buffer("hello asio udp"), ep);
}
}
catch(std::exception& e){
cout << e.what() << endl;
}
return 0;
}

udp client端源码

//g++ -g udp_client.cpp -o udp_client -lboost_system
//

#include <iostream>
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>

using namespace std;
using namespace boost::asio;

int main(){
try{
cout << "udp client start ......" << endl;
io_service ios;
ip::udp::endpoint send_ep(ip::address::from_string("127.0.0.1"), 6699);

ip::udp::socket sock(ios);
sock.open(ip::udp::v4());

char buf[1];
sock.send_to(buffer(buf), send_ep);

vector<char> v(100, 0);
ip::udp::endpoint recv_ep;
sock.receive_from(buffer(v), recv_ep);
cout << "recv from " << recv_ep.address() << endl;
cout << &v[0] << endl;
}
catch(exception& e){
cerr << e.what() << endl;
}
return 0;
}

运行截图

boost::asio使用UDP协议通信源码实现

boost::asio使用UDP协议通信源码实现

参考文献

[1].罗剑锋, Boost程序库完全开发指南---深入C++"准"标准库