boost--asio,boost asio库教程

  boost::asio,boost asio库教程

  C 03:使用助推-用澳洲安全情报局实现简易回声服务器

  C 03:使用助推-用澳洲安全情报局实现简易回声服务器

  2009-10-29 11:27

  一、编写代码注:以下代码取自升压1.40的示例代码:

  //

  //异步_tcp_echo_server.cpp

  //~~~~~~~~~~~~~~~~~~~~~~~~~

  //版权所有2003-2008年克里斯托弗m科尔霍夫

  //根据促进软件许可证1.0版分发。(参见随附的

  //文件许可证_1_0.txt或在http://www.boost.org/LICENSE_1_0.txt复制)

  #包含标准库函数

  #包括输入输出流

  #包含升压/绑定. hpp

  #包含boost/asio.hpp

  使用boost:asio:IP:TCP;

  课堂会话{

  公共:

  会话(boost:asio:io _ service io _ service):

  socket_(io_service) {

  tcp:socket socket() {

  返回套接字_;

  void start() {

  套接字_ .async _ read _ some(boost:asio:buffer(data _,max_length),

  boost:bind(session:handle _ read,this,

  boost:asio:占位符:错误,

  boost:asio:占位符* bytes _ transferred));

  void handle _ read(常量boost:system:error _ code错误,

  size _ t bytes _ transfered){

  如果(!错误){

  boost:asio:async _ write(socket _,boost:asio:buffer(data_,

  bytes _ transferred)、boost:bind(session:handle _ write,

  this,boost:asio:placeholders:error));

  }否则{

  删除这个;

  void handle _ write(常量boost:system:error _ code错误){

  如果(!错误){

  套接字_ .async _ read _ some(boost:asio:buffer(data _,max_length),

  boost:bind(session:handle _ read,this,

  boost:asio:占位符:错误,

  boost:asio:占位符* bytes _ transferred));

  }否则{

  删除这个;

  私人:

  TCP:socket socket _;

  枚举{

  最大长度=1024

  char data _[max _ length];

  类别服务器{

  公共:

  服务器(boost:asio:io _ service io _ service,短端口) :

  io_service_(io_service),acceptor_(io_service,tcp:endpoint(tcp:v4(),

  port)) {

  会话*新会话=新会话(io _ service _);

  接受者_。async _ accept(new _ session-socket(),boost:bind(

  server:handle_accept,this,new_session,

  boost:asio:占位符:错误));

  void句柄_接受(会话*新建_会话,

  const boost:系统:错误代码错误){

  如果(!错误){

  new_session- start()。

  新会话=新会话(io _ service _);

  接受者_。async _ accept(new _ session-socket(),boost:bind(

  server:handle_accept,this,new_session,

  boost:asio:占位符:错误));

  }否则{

  删除新会话;

  私人:

  boost:asio:io _ service io _ service _;

  TCP:acceptor acceptor _;

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

  尝试{

  如果(argc!=2) {

  标准:cerr 用法:异步传输控制协议回应服务器端口

  返回1;

  boost:asio:io _ service io _ service;

  使用命名空间标准

  //为了阿托伊.

  服务器s(io_service,atoi(argv[1]);

  io _ service。run();

  } catch (std:exception e) {

  "标准:证书"异常:" e . what()" n ";

  返回0;

  }二、编译代码$ g-G3-Wall-o async _ TCP _ echo _ server async _ TCP _ echo _ server。CPP-lboost _ system注意:boost.asio库依赖升压_系统

  三、运行async_tcp_echo_server$ ./async _ TCP _ echo _ server 8868 # 8868是异步传输控制协议回应服务器监听的端口号四、用远程登录命令作为客户端测试新开启一个终端,注意:同样要登录到Linux操作系统操作系统实验室,执行:telnet本地主机8868

  $ telnet本地主机8868

  正在尝试:1.

  正在尝试127.0.0.1.

  已连接到本地主机。

  逃跑的角色是^].

  第一行#这是我们的输入

  第一行#这是服务器异步传输控制协议回应服务器的回应,以下类推

  第二行

  第二行

  欢迎来到xuanyuan-soft.org.cn!

  欢迎来到xuanyuan-soft.org.cn!五、关于促进更多的信息请访问促进的主页:http://www.boost.org/

boost--asio,boost asio库教程