C++网络编程卷1 笔记-2

C++网络编程卷1 笔记-2

    ACE_SOCK_Acceptor类扮演一个“被动连接端”,可以理解为服务端。

    该类是通过factory模式,接受客户端的连接,并在连接建立后初始化ACE_SOCK_Stream对象。ACE_SOCK_Acceptor类的Open方法以正确的次序调用底层的socket(),bind(),listen()函数。

    一个例子,实现功能:

   1.侦听在80端口,接受客户连接;

   2.读取GET请求中的路径名,然后将该文件发送给客户。

   3.关闭连接。

   4.回到第1步。

  #include "ace/Auto_Ptr.h"
  #include "ace/INET_Addr.h"
  #include "ace/SOCK_Acceptor.h"

  #include "ace/SOCK_Stream.h"
  #include "ace/Mem_Map.h"

  // Return a dynamically allocated path name buffer,
  extern char *get_url_pathname (ACE_SOCK_Stream * ) ;

int main ()
{
   ACE_INET_Addr server_addr; 

   ACE_SOCK_Acceptor acceptor;
   ACE_SOCK_Stream peer;
   if (server_addr.set (80) == -1) return 1;
   if (acceptor.open (server_addr) == -1) return 1;
   for (;;) {
        if (acceptor.accept (peer) == -1) return 1;
        peer->disable (ACE_NONBLOCK); // Ensure blocking send_n
        auto_ptr pathname = get_url_pathname (peer); //取得用户请求的文件名
        ACE_Mem_Map mapped_file (pathname.get ());
        i f (peer.send_n (mapped_file.addr ( ) ,
           mapped_file.size ( ) ) == -1) return 1;
       peer.close ( ) ;
   }
   return acceptor.close () = = -1 ? 1 : 0;
}

   ACE_Mem_Map实现了“内存映射”文件机制。为不同平台的实现提供统一的接口。

    大量客户同时请求时,这个循环式的WEB服务器有很大缺点,可能有多个用户处于等待状态,后面的内容会解决这个问题。

有关ACE_INET_Addr类下次接着聊.

  待续...

 

 

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

zmxjh

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值