• Boost socket 同步编程示例(服务端,客户端)


    服务端程序代码:

     1 // BoostServer.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream> 
     6 #include <boost/asio.hpp> 
     7 
     8 using namespace boost::asio;
     9 #define BLOCK_SIZE 64*1024
    10 
    11 int main(int argc, char* argv[])
    12 {
    13     // 所有asio类都需要io_service对象 
    14     io_service iosev; 
    15     ip::tcp::acceptor acceptor(iosev,  
    16         ip::tcp::endpoint(ip::tcp::v4(), 1000)); 
    17     for(;;) 
    18     { 
    19         // socket对象 
    20         ip::tcp::socket socket(iosev); 
    21         // 等待直到客户端连接进来 
    22         acceptor.accept(socket); 
    23         // 显示连接进来的客户端 
    24         std::cout << "client from: " 
    25             << socket.remote_endpoint().address() << std::endl; 
    26         
    27         boost::system::error_code ec;
    28 
    29         // 从客户端读取数据
    30         char buf[BLOCK_SIZE];
    31         int len = socket.read_some(buffer(buf), ec);
    32         // 或者可以使用read_until读到某个字符为止
    33         // 或者可以使用某种判断方式循环读取
    34 
    35         if (ec)
    36         {
    37             std::cout <<  
    38                 boost::system::system_error(ec).what() << std::endl; 
    39             break
    40         }
    41         std::cout.write(buf, len);
    42         std::cout << len << std::endl;
    43 
    44         Sleep(1000);
    45 
    46         // 向客户端发送 
    47         len = socket.write_some(buffer(buf, len), ec); 
    48         if(ec) 
    49         { 
    50             std::cout <<  
    51                 boost::system::system_error(ec).what() << std::endl; 
    52             break
    53         } 
    54         std::cout << "writed " << len << std::endl;
    55         // 与当前客户交互完成后循环继续等待下一客户连接 
    56     } 
    57 
    58 
    59     return 0
    60 
    61 }

    客户端程序代码:

     1 // BoostClient.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream> 
     6 #include <boost/asio.hpp> 
     7 
     8 using namespace boost::asio; 
     9 
    10 #define BLOCK_SIZE 64*1024
    11 
    12 void fill_buffer(char* s)
    13 {
    14     for (int i=0; i<BLOCK_SIZE; i++)
    15     {
    16         s[i] = 'a';
    17     }
    18 }
    19 
    20 int main(int argc, char* argv[])
    21 {
    22     // 所有asio类都需要io_service对象 
    23     io_service iosev; 
    24     // socket对象 
    25     ip::tcp::socket socket(iosev); 
    26     // 连接端点,这里使用了本机连接,可以修改IP地址测试远程连接 
    27     ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"), 1000); 
    28     // 连接服务器 
    29     boost::system::error_code ec; 
    30     socket.connect(ep,ec); 
    31     // 如果出错,打印出错信息 
    32     if(ec) 
    33     { 
    34         std::cout << boost::system::system_error(ec).what() << std::endl; 
    35         return -1
    36     } 
    37     // 发送数据
    38     char buf[BLOCK_SIZE];
    39     fill_buffer(buf);
    40     size_t len = socket.write_some(buffer(buf), ec);
    41     std::cout << "writed " << len << std::endl;
    42 
    43     // 接收数据 
    44     memset(buf, 0, BLOCK_SIZE);
    45     len=socket.read_some(buffer(buf), ec); 
    46     std::cout.write(buf, len); 
    47     std::cout << len << std::endl;
    48 
    49     return 0
    50 
    51 }
  • 相关阅读:
    pycharm2017.3.7的安装
    SVN Working Copy xxx locked 并 cleanup失败之解
    Lua查找字符串注意
    Lua运算符
    Python操作Excel
    项目中碰到的Ajax相关的问题记录
    线程的相关概念
    val()用法和value的区别
    JSON数组对象和JSON字符串的转化,map和JSON对象之间的转化
    算法复杂度相关概念
  • 原文地址:https://www.cnblogs.com/hcfalan/p/1962657.html
Copyright © 2020-2023  润新知