关于boost::asio

博客介绍了在C/C++中进行异步读操作可使用async_read_some或者async_read等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// BoostServer.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream> 
#include <boost/asio.hpp> 

using namespace boost::asio;
#define BLOCK_SIZE 64*1024

int main(int argc, char* argv[])
{
    // 所有asio类都需要io_service对象 
    io_service iosev; 
    ip::tcp::acceptor acceptor(iosev,  
        ip::tcp::endpoint(ip::tcp::v4(), 1000)); 
    for(;;) 
    { 
        // socket对象 
        ip::tcp::socket socket(iosev); 
        // 等待直到客户端连接进来 
        acceptor.accept(socket); 
        // 显示连接进来的客户端 
        std::cout << "client from: " 
            << socket.remote_endpoint().address() << std::endl; 
        
        boost::system::error_code ec;

        // 从客户端读取数据
        char buf[BLOCK_SIZE];
        int len = socket.read_some(buffer(buf), ec);
        // 或者可以使用read_until读到某个字符为止
        // 或者可以使用某种判断方式循环读取

        if (ec)
        {
            std::cout <<  
                boost::system::system_error(ec).what() << std::endl; 
            break; 
        }
        std::cout.write(buf, len);
        std::cout << len << std::endl;

        Sleep(1000);

        // 向客户端发送 
        len = socket.write_some(buffer(buf, len), ec); 
        if(ec) 
        { 
            std::cout <<  
                boost::system::system_error(ec).what() << std::endl; 
            break; 
        } 
        std::cout << "writed " << len << std::endl;
        // 与当前客户交互完成后循环继续等待下一客户连接 
    } 


    return 0; 

}

  异步读可以使用async_read_some或者async_read等

转载于:https://www.cnblogs.com/wangshaowei/p/10945899.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值