zoukankan      html  css  js  c++  java
  • C++网络编程(卷1):学习笔记(二)

    ACE Socket Wrapper Facade 类:

    外观模式的介绍很多,可参考wiki百科的说明,很容易理解。要是不理解还可以看看,阿牛讨媳妇MM拍照

    image

    ACE_Addr                 ACE”网络地址”继承结构的根

    ACE_INET_Addr         主要提供了以下方法:

    ACE_INET_Addr()     通过主机名、IP地址和端口号初始化ACE_INET_Addr

    string_to_addr()       字符串转为ACE_INET_Addr

    addr_to_string()       将ACE_INET_Addr转换为字符串

    get_port_number()    以主机字节序返回端口

    get_host_name()       返回主机名

    避免遗漏:

    1.将底层sockaddr_in中所有字节初始化为0;

    2.将端口号和IP地址转换为网络字节序

    ACE_IPC_SAP  (抽象类)         ACE IPC wrapper facade继承结构的根,为其他ACE wrapper facade提供了基本的I/O句柄操作能力

    enable()           启用或禁止各种I/O句柄选项。例如,启用/禁止“非阻塞”I/O

    disable()

    set_handle()     设置或得到底层句柄I/O

    get_handle()

    解决I/O句柄的可移植性问题:

    1.提供了ACE_HANDLE类型定义,在每个OS平台上指定合适的句柄类型

    2.定义了可移植的ACE_INVALID_HANDLE宏,应用程序可用来检测错误

    ACE_SOCK  (抽象类)           ACE Socket wrapper facade继承结构的根。

    open()                    创建和销毁一个socket通信端点

    close()

    set_local_addr()       分别返回本地和远程对端的地址

    get_remote_addr()

    set_option()             设置和读取socket选项

    get_option()

    可以避免:

    1.将ACE_SOCK_Stream作为值传递或者复制给别的对象

     

    ACE_SOCK_Connector    工厂,用来主动建立一个新的连接

    connect()          通过“阻塞”、“非阻塞”或“定时”模式之一,主动连接某一网络地址上的ACE_SOCK_Stream

    complete()        结束一个“非阻塞”连接并初始化一个ACE_SOCK_Stream

    只展示用于“主动建立连接”的方法,从而防止了对它的意外误用

    为简化IPC类和相关地址类的批量替换,ACE Socket wrapper facade定义了traits(特征类)。这是一种C++泛型技术,用来定义和结合一组特征,以改变模板类的行为

    可重入

    ACE_SOCK_IO

    ACE_SOCK_Stream       其实例在ACE_SOCK_Acceptor或ACE_SOCK_Connector”工厂"中初始化

    send()            发送、接收数据缓冲区数据。读、写的字节数可能比请求的字节数少

    recv()

    send_n()         发送、接收恰好N个字节的缓冲区数据

    recv_n()

    recvv_n()        使用OS的“分散读取”系统函数

    sendv_n()       使用OS的“集中写入”系统函数

    如果要禁用Nagle算法,可以调用peer.set_option(),并使用TCP_NODELAY标志,强制TCP尽快将报文发送出去

    ACE_SOCK_Acceptor  工厂,用来被动地建立一个新的通信端点

    open()           初始化"被动模式 ”、"工厂"socket,被动侦听一个指定的ACE_INET_Addr地址

    accept()         通过一个新接受的客户连接初始化ACE_SOCK_Stream参数

    避免:

    1.ACE_SOCK_Acceptor的open()方法总是以正确的顺序调用socket()、bind()和listen()函数

    2.这些函数所调用的socket句柄,只会是那些已经被"被动模式"socket句柄工厂初始化了的socket句柄

  • 相关阅读:
    POJ 1011Sticks
    zz 深入浅出CGlib打造无入侵的类代理
    教你如何用SQL备份和还原数据库
    sql server 2008 评估期已过期解决办法
    C# 第三方分页控件的使用
    Listbox移除
    Winwos server2008 IE安全级别设置
    验证手机号码和固定电话正则表达式
    SQL 左外连接,右外连接,全连接,内连接 4种连接的区别
    SQL TOP 和 DISTINCT 结合使用
  • 原文地址:https://www.cnblogs.com/westwind/p/2512367.html
Copyright © 2011-2022 走看看