ACE的Socket网络编程

本文详细介绍ACE库中的关键网络编程组件,包括ACE_SOCK_Connector、ACE_SOCK_Acceptor和ACE_SOCK_Stream等类的功能与用法,以及ACE_Message_Block类在消息管理中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

针对Socket API不直接支持“主动连接”模式,ACE将“连接管理”所涉及的三个角色:

主动连接角色(active connection role)

被动连接角色(passive connnection role)

通信角色(communication role)

分别以类的形式提供给使用者以降低复杂度:

ACE_SOCK_Connector

ACE_SOCK_Connector类是一个工厂(factory),用来主动建立一信的通信端。

功能:

·发起一个到“对等接受者(peer acceptor)”的连接,并在连接建立后初始化一个ACE_SOCK_Stream对象。

·连接可以通过“阻塞”、“非阻塞”或“定时”方式发起。

ACE_SOCK_Connector的两个主要方法:

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

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

ACE_SOCK_Stream

ACE_SOCK_Stream定义了一个“数据模式”的“只传输(transfer-only)”对象。ACE_SOCK_Stream对象不能用作其他任何角色;若不是有意破坏它的接口,它就只能用作“数据传输”角色。

ACE_SOCK_Stream类封装了“数据模式”socket支持的数据传输机制。功能如下:

·支持数据的发送和接收。发送和接收的字节数最多n个或刚好n个。

·支持“分散读取(scatter-read)”操作、。这些操作涉及多个“调用者提供(caller-supplied)”的缓冲区,而不是单个连续的缓冲区。

·支持“集中写入(gather-write)”的操作。在单个操作中传输多个非连续数据缓冲区中的数据。

·支持“阻塞”、“非阻塞”、“定时”I/O操作。

·支持泛型编程技术,可以借助“参数化类型”实现功能上的批量转换。

ACE_SOCK_Stream输出的主要方法:

send()/recv() 发送、接收数据库缓冲区数据。读、写的字节数可能比请求的字节数少,因为它们要受“OS中的缓冲机制”和“传输协议中的流量控制”影响。

send_n()/recv_n() 发送、接收恰好n个字节的缓冲区数据,简化“少量写入”和“少量读取”时的应用程序处理。

recvv_n()/sendv_n() 使用OS的“分散读取”系统函数,高效、完整地接收/发送多个缓冲区数据。

ACE_SOCK_Acceptor

ACE_SOCK_Acceptor类是一个“工厂(factory)”,用来“被动”地建立一个信的通信端点。他提供以下功能:

·接受来自对等连接端(peer connector)的连接,并在连接建立后初始化ACE_SOCK_Stream对象。

·连接可以通过“阻塞”、“非阻塞”或“定时”的方式接受。

·运用C++ traits支持泛型编程技术;从而,可以通过C++“参数化类型”实现功能上的批量转换。

主要的两个方法:

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

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

ACE_Message_Block

ACE 中为了高效进行消息相关的管理,降低动态内存管理的开销,减少不必要的数据复制,而提供了ACE_Message_Block类。 ACE_Message_Block使用了Composite模式,使得能够将消息灵活地组合,从而支持复合消息。在类中定义友元 ACE_Data_Block,并提供一个指向ACE_Data_Block的指针。而ACE_Data_Block则采用引用计数以共享数据,降低内存 复制带来的额外开销。

主要方法:

ACE_Message_Block()/init() 对消息进行初始化。

msg_type() 设置和获取消息的类型。

msg_priority() 设置和获取消息的优先级。

clone() 返回消息的完整“深复制(deep copy)”。

duplicate() 返回消息的“浅(shollow)”复制,将其引用计数增1。

release() 将引用计数减1,如果计数值降至0,则释放消息的资源。

set_flags() 将指定的数据位同一组已有的标志执行“按位或”操作,用以指定消息的语意(例如消息释放时是否删除缓冲区,等等)。

copy() 从缓冲区中复制n个字节到消息。

rd_ptr() 设置和获取“读”指针。

wr_ptr() 设置和获取“写”指针。

cont() 设置和获取消息中的“连接”字段,这个字段用于将复合消息连接在一起。

nest()/prev() 设置和获取“指向ACE_Message_Queue中的双向消息列表”的指针。

length() 设置和获取消息的当前长度,即wr_ptr() - rd_ptr()。

total_length() 获取消息的长度,包括所有被连接的消息块。

size() 设置和获取消息的总容量,包括分配在[rd_ptr(),wr_ptr()]范围之前及之后的存储容量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值