UDP boost::asio的实现

UDP boost::asio的实现

分类: 网络编程 547人阅读 评论(3) 收藏 举报
UDP boostasio C++

       最近在研究网络相关的东西,发现之前对UDP的理解很弱,太依赖于TCP,依赖到甚至忘记了还有一个UDP的存在。于是在网上随便搜了UDP socket编程的相关代码和资料,发现有人写的编程例子里面居然还有connect的存在,我很无语。

       UDP相对于TCP而言是不可靠的传输协议,在网络环境较差的情况下用TCP无疑是唯一的选择,在网络环境很好的情况下,比如局域网内部的消息传输,进程与进程之间的通信,UDP无疑是最好的选择,UDP不仅在传输效率上有很大的优势,我觉得更大的优势在于它不需要维护连接,可以减少很多逻辑上的冗余。

        下面给大家看看一段代码,UDP的简单通信。

服务端代码,实现了echo功能:

[cpp] view plain copy
  1. /** @file UdpEchoServer.cpp 
  2.  *  @note Hangzhou Hikvision System Technology Co., Ltd. All Rights Reserved. 
  3.  *  @brief an udp server, echo what the client say. 
  4.  * 
  5.  *  @author Zou Tuoyu 
  6.  *  @date 2012/11/28 
  7.  * 
  8.  *  @note 历史记录: 
  9.  *  @note V1.0.0.0 创建 
  10.  */  
  11.   
  12. //boost  
  13. #include "boost/thread.hpp"  
  14. #include "boost/asio.hpp"  
  15.   
  16. //stl  
  17. #include <string>  
  18. #include <iostream>  
  19.   
  20. using namespace std;  
  21.   
  22. int main()  
  23. {  
  24.     boost::asio::io_service io_service;  
  25.     boost::asio::ip::udp::socket udp_socket(io_service);  
  26.     boost::asio::ip::udp::endpoint local_add(boost::asio::ip::address::from_string("10.64.49.70"), 7474);  
  27.   
  28.     udp_socket.open(local_add.protocol());  
  29.     udp_socket.bind(local_add);  
  30.   
  31.     char receive_buffer[1024] = {0};  
  32.     while (true)  
  33.     {  
  34.         boost::asio::ip::udp::endpoint send_point;  
  35.         udp_socket.receive_from(boost::asio::buffer(receive_buffer, 1024), send_point);  
  36.         cout << "recv:" << receive_buffer << endl;  
  37.         udp_socket.send_to(boost::asio::buffer(receive_buffer), send_point);  
  38.   
  39.         memset(receive_buffer, 0, 1024);  
  40.     }  
  41.   
  42.     return 1;  
  43. }  



client端,输入

[cpp] view plain copy
  1. //boost  
  2. #include "boost/asio.hpp"  
  3.   
  4. //stl  
  5. #include <iostream>  
  6.   
  7. using namespace std;  
  8.   
  9. int main()  
  10. {  
  11.     boost::asio::io_service io_service;  
  12.     boost::asio::ip::udp::socket socket(io_service);  
  13.     boost::asio::ip::udp::endpoint end_point(boost::asio::ip::address::from_string("10.64.49.70"), 7474);  
  14.     socket.open(end_point.protocol());  
  15.     char receive_buffer[1024] = {0};  
  16.     while (true)  
  17.     {  
  18.         cout << "input:";  
  19.         string input_data;  
  20.         cin >> input_data;  
  21.         cout << endl;  
  22.   
  23.         try  
  24.         {  
  25.             socket.send_to(boost::asio::buffer(input_data.c_str(), input_data.size()), end_point);  
  26.   
  27.             socket.receive_from(boost::asio::buffer(receive_buffer, 1024), end_point);  
  28.   
  29.             cout << "recv:" << receive_buffer << endl;  
  30.         }  
  31.         catch (boost::system::system_error &e)  
  32.         {  
  33.             cout << "process failed:" << e.what() << endl;  
  34.         }  
  35.     }  
  36. }  



本人对UDP的理解也很肤浅,有纰漏地方敬请指出,不甚感激。

你可能感兴趣的:(网络编程)