我的导师要我学下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;
}