根据msdn整理,有以下9种通信方式,
A与B通信
1、剪贴板(Clipboard)
信息交换方式:A将数据放在剪贴板,由B访问剪贴板以访问共享数据。
数据格式:格式松散,只需要两个进程以约定的格式即可。
是否支持网络:支持
2、COM(component object model)
信息交换方式:当A连接或嵌入B所使用的数据时,自动调用B进程来编辑数据。相当于扩展了A的功能。
数据格式:B所使用的特定格式
是否支持网络:未知
3、数据拷贝(Data Copy)
信息交换方式:A使用WM_COPYDATA消息向B发送数据。B需要能够识别出数据格式和识别出发送者A。WM_COPYDATA只可以能过SendMessage发送,如果使用PostMessage,接收方就不会收到发送的消息,因为PostMessage不是同步的调用,这样就无法保证在接收方收到消息的时个WM_COPYDATA中的数据还正确的保存在内存中。A通过进程名字来得到B进程主窗体的句柄,之后向B派送消息。
数据格式:WM_COPYDATA消息,COPYDATASTRUCT结构体(包含指针指向所要发送的数据)
是否支持网络:未知
4、DDE(Dynamic Data Exchange)
剪贴板方式的一种延伸。DDE数据交换本质上是一组Windows消息,再通过剪贴板或共享内存等方法进行数据交换。此种方式还支持一个进程处于多个对话中,但两个进程只能有一个对话。
信息交换方式:1,client(A)初始化对话,server(B)回应;2,通过以下方式交换数据:server响应client的请求向其发送数据;client向server发送非请求数据;client请求server在数据更改时通知server;client请求server在数据更改时发送数据给client;server响应client的请求执行一条命令;3、client或server终止。
数据格式:参数传递可通过剪贴板,全局变量,共享内存对象
是否支持网络:支持
5、文件映射(File Mapping)
将一个文件当做进程间的共享内存块。进程使用指针操作来检查和修改文件的内容。每个进程提供自己的内存块来读写这个文件。该文件读写需使用同步机制,如semaphore。这是一种高效的多个进程间共享数据的方式,可由操作系统提供权限控制以保证数据安全,但需要开发者提供同步机制。
信息交换方式:共享文件
数据格式:文件
是否支持网络:否
6、邮件槽(Mailslot)
这是一种单向的通信。创建邮件槽的进程B成为邮件槽服务器,其他进程A向邮件槽发消息,成为邮件槽客户端。进入的消息均添加到邮件槽的末尾,消息一直保存在邮件槽中,直到被B读出。可以通过多个邮件槽实现双向通信。
信息交换方式:向邮件槽写消息
数据格式:邮件槽消息
是否支持网络:支持
7、管道(Pipes)
分为两种:匿名管道和有名管道。两种管道可单向,可双向。匿名管道用于父子进程间通信,通过重定向子进程的输入输出来和父进程通信,要实现双向通信,需要建两个匿名管道。匿名管道不能用于多台机器间,也不能用于没有关系的进程。有名管道可用于没有关系的进程和机器间。其过程如下:进程B创建一个有名管道,名字为其他进程A所知道,之后进程A根据这个名字打开管道另一端,对管道的访问权限由B决定。之后A与B可通过在管道上的读写操作来实现数据交换。
信息交换方式:通过管道
数据格式:管道内的数据
是否支持网络:匿名管道不支持,有名管道支持
8、RPC
RPC允许远程调用函数,使IPC像调用函数一样简单。支持多个机器上进程通信。Windows提供的RPC与开放软件基金会(Open Software Foundation)的分布式计算环境(Distributed Computing Environment)兼容,因而可以支持非windows的机器。
信息交换方式:未知
数据格式:未知
是否支持网络:支持
9、windows套接字(Windows Sockets)
这是一种与协议无关的接口,充分利用底层协议的通信功能。Windows的sockets可与其他系统上的Sockets实现相互通信。主要用于网络通信。
信息交换方式:未知
数据格式:未知
是否支持网络:支持