学习boost::asio(1)



我的导师要我学下boost::asio,于是查找资料,上网,看英文文档,终于

有所了解,于是写下该文!

建立服务端和客户端,用到

boost::asio等等。


1)建立服务端
#include "stdafx.h"


#include<iostream>

#include<boost/asio.hpp>
#include<boost/bind.hpp>
#include<boost/function.hpp>

using namespace boost::asio;
using namespace std;

typedef boost::shared_ptr<ip::tcp::socket> socket_ptr;
io_service iosev;
ip::tcp::acceptor acceptor(iosev,
    ip::tcp::endpoint(ip::tcp::v4(), 1000));

//endpoint是要连接的地址和端口
void handle_accept(socket_ptr sock, const boost::system::error_code &ec);

//接收客户端连接的请求

void start_acc(socket_ptr sock){
    acceptor.async_accept(*sock, boost::bind(handle_accept,sock,_1));
}

//处理连接上的客户端
void handle_accept(socket_ptr sock, const boost::system::error_code &ec){
    if (ec) return;//若出错,则返回
    sock->write_some(buffer("helloworld"));//用sock往客户端输出信息
    socket_ptr sock1(new ip::tcp::socket(iosev));//重新创建一个sock以此来处理另外的客户端
    start_acc(sock1);
}
int main(int argc,char* argv[]){
   
   
    socket_ptr sock(new ip::tcp::socket(iosev));
    start_acc(sock);
    iosev.run();
    
    return 0;
}


2)建立客户端

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

#include "stdafx.h"


#include<iostream>

#include<boost/asio.hpp>

using namespace boost::asio;
using namespace std;

int main(int argc, char * argv[]){
    io_service iosev;

    ip::tcp::socket socket(iosev);//这个socket能处理输入输出

    ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"), 1000);

    boost::system::error_code ec;
    socket.connect(ep, ec);

    if (ec){
        cout << boost::system::system_error(ec).what() << endl;
        return -1;

    }
    char buf[100];
    size_t len = socket.read_some(buffer(buf), ec);
    cout.write(buf, len);//输出接收到的信息
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值