Linux 上实现 Socket 的多进程实时通信
套接口(Socket)为目前 Linux 上最为广泛使用的一种的进程间通信机制。但是它
不能直接用来多进程之间的相互实时通信。本文提出一个基于 Socket 的多进程之间通信
的实现方法,并给出样本程序的实现和说明。
套接口(Socket)为目前 Linux 上最为广泛使用的一种的进程间通信机制,与 其他
的 Linux 通信机制不同之处在于除了它可用于单机内的进程间通信以外,还可用于不同机
器之间的进程间通信。但是由于 Socket 本身不支持同时等待 和超时处理,所以它不能直
接用来多进程之间的相互实时通信。
本文提出一个基于 Socket 的多进程之间通信的实现方法。原理是建立一个进程专 门
用来做为通信服务器(server)来中转各个进程之间的通信。它首先启动一个用来监视连接
要求的 listening Socket,并把它的描述(Descriptor)号加入到一个事先定义好的
fd_set 的集合中,这个 fd_set 的集合用来存放 listening Socket 和后来生成的通信
Socket 的描述号。Server 运用 system call select 来实时检查是否有数据到达这个集合
中的任何一个 socket,如果有数据到达 listening Socket,则这一定是客户端发起的连接
请求,于是生成一个新的通信 Socket 与该客户端连接,将生成的 Socket 描述号加入到
fd_set 的集合 中,将客户端的 ID 号和与之对应的 Socket 的描述号记录在 ID 登记表中。
如果有数据到达某个通信 Socket,则这一定是某个客户端发起的通信请求, 读出数据并
取出收信客户端 ID 号,在 ID 登记表中找到与之对应的 Socket 描述号,将数据通过对应
Socket 传送到收信客户端。
其他各进程作为客户端(client)。客户端的动作是首先建立通信 Socket 连接服务器
端,然后通过通信 Socket 进行送信和收信。
下面给出具体的程序实现和说明,
首先给出 Server 端的程序,在这里假设有两个客户端要进行实时通信,ClientA 向
ClientB 发送字符 1,ClientB 向 ClientA 发送字符 2。
#include
#include
#include
#include
#include
#include
#include
#include
int main()
{
int rcd ;