对于大多数程序员而言,进程间通信(IPC)与使用Socket API是同义词。 套接字API最初是为UNIX®平台开发的,旨在在TCP / IP协议之上提供应用程序级别的接口。 它支持多种功能,其中一些功能如表1所示。
表1.构成Socket API一部分的旧式C例程
C函数名称 | 提供的功能 |
---|---|
socket |
分配新的套接字句柄 |
bind |
将套接字句柄与本地或远程地址相关联 |
listen |
被动侦听传入的客户端连接请求的例程 |
connect |
客户端计算机使用connect 例程开始TCP握手; 服务器使用accept 例程来接受连接请求 |
send |
例行数据传输 |
recv |
例行接收数据 |
使用本机Socket API存在几个问题。 首先,尽管API的遗留C
函数几乎无处不在,但它们却不可移植。 例如,Windows®中的socket
方法返回类型为SOCKET
的句柄,而在UNIX中,相同的函数返回整数。 有些方法(如closesocket
仅存在于Windows中,更不用说不兼容的标头了。 此外,本机API的许多错误仅在运行时出现,例如,地址或协议不匹配或未初始化的数据成员。
自适应通信环境(ACE)框架定义了解决这些问题的一组包装外观。 本文剖析了ACE在相同或不同主机之间为IPC提供的一些基于C++
的,面向对象的类。
用于网络编程的ACE类
表2显示了ACE为TCP / IP连接定义的一些基本类。
表2. ACE中用于网络编程的类
ACE班 | 提供的功能 |
---|---|
ACE_Addr |
ACE中的基类; 用于网络寻址 |
ACE_INET_Addr |
源自ACE_Addr ; 用于Internet域名寻址 |
ACE_SOCK |
ACE套接字包装外观层次结构的基类: ACE_SOCK_Acceptor , ACE_SOCK_Connector 等 |
ACE_SOCK_Acceptor |
用于建立被动连接; 从概念上讲类似于Berkeley Software Distribution(BSD)的accept() 和listen() 例程 |
ACE_SOCK_Connector |
在流对象和远程主机之间建立连接; 在概念上类似于BSD connect() 例程 |
ACE_SOCK_Stream |
用于处理面向TCP连接的数据传输的类 |
对于用户数据报协议(UDP)通信,使用ACE_SOCK_Dgram
类及其变体。 声明这些对象的头文件位于您安装的$ ACE_ROOT / ace / include区域中。 相关标头被适当命名为SOCK_Acceptor.h,SOCK_Listener.h,SOCK_Stream.h,依此类推。