24、Windows API 进程间通信,其他进程间通信方式

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 1、动态数据交换(DDE)和网络动态数据交换(NDDE)[1,2] DDE可能是最为强大的进程间通信方式,实现也非常复杂。通信的两端分为服务端与客户端,两端都需要具有窗口。 一个DDE的通信过程大致如下: DDE会话由客户端发起,先初始化一个会话。

1、动态数据交换(DDE)和网络动态数据交换(NDDE)[1,2]<?xml:namespace prefix = o />

DDE可能是最为强大的进程间通信方式,实现也非常复杂。通信的两端分为服务端与客户端,两端都需要具有窗口。

一个DDE的通信过程大致如下:

DDE会话由客户端发起,先初始化一个会话。DDE客户端会向服务端发送一个WM_DDE_INITIATE窗口消息。服务窗口收到此消息后,根据条件判断是否需要响应此消息,如果服务端确定可以与客户端建立会话,那么会返回WM_DDE_ACK消息。如果客户端成功收到了服务端发送的WM_DDE_ACK窗口消息,那么会话就已经建立,之后就进行数据的传输。

数据传输分为很多种方式,可以只传输一个单独的数据项,也可以再建立一个永久数据连接( Permanent Data Link)

如果进行独立数据项传输,数据传输的单位是数据项。客户端使用WM_DDE_REQUESTWM_DDE_POKE消息向服务端接收和发送数据项。数据的传输使用WM_DDE_DATA消息。

而永久数据连接的建立也是通过客户端发起,客户端向服务端发送WM_DDE_ADVISE消息,服务端根据情况做出回应,根据是否能够建立连接而返回不同的WM_DDE_ACK消息。终止数据连接使用消息WM_DDE_UNADVISE

客户端还可以使用WM_DDE_EXECUTE请服务端发送命令。

终止一个DDE会话使用WM_DDE_TERMINATE消息。

几乎所有的过程都是由客户端发起请求,而服务端响应,服务端响应的方向大多是发送一个WM_DDE_ACK消息。

DDE的通信需要操作系统ATOM表的帮助,用于索引数据。操作ATOM表有专门的API

2、通过File Mapping在进程间共享数据[3]

    共享文件是一种高效的进程间通信方式,因为直接共享内存,所以访问速度非常快。而且允许大量数据传输。

    共享内存的进程间通信与其他进程间通信方式相比,限制条件要少。比如邮槽对数据大小和数据流向有限制,管道只能采用半双工通信形式等,剪贴板容易受其他进程影响等。

使用File Mapping共享数据也有缺点。最大的缺点是无法实现实时性,一个进程无论是写入还是读出数据后,另一个进程都不知道对方的操作是否已经完成。因此在要求实时数据传输时,File Mapping通常与其他进程通信方式配合使用,用于传输大量的数据。

3Windows Socket

    利用Windows Socket实现的进程间通信借用了Socket通信的原理。其实任何可以在两台主机间进行网络数据通信的机制都可以用于进程间通信。

    如果在一台主机上既使用Socket服务端又实现Socket客户端,那么客户端在连接服务端时将IP指定为本机,就可以实现同一主机上的Socket服务端进程和Socket客户端进程间的通信。

    使用Socket进行进程间通信既可以实现实时性,又可以传输大数据量信息,且数据传输的速度也很快,因此应用范围很广泛。

    在进程间实现Socket通信的原理和程序实现方法与实现不同主机间的Socket通信没有区别。

参考

[1] 精通Windows API 函数、接口、编程实例

[2] http://msdn.microsoft.com/en-us/library/ms648711%28VS.85%29.aspx

[3] http://www.cnblogs.com/mydomain/archive/2011/01/07/1929874.html

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
网络协议 API Windows
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
MASM32编程调用 API函数RtlIpv6AddressToString,windows 10 容易,Windows 7 折腾
|
2月前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
2月前
|
Windows
Windows中如何查看被占用的端口、杀掉对应的进程
这篇文章介绍了在Windows系统中如何查看被占用的端口号以及如何杀掉占用端口的进程,包括使用命令提示符的`netstat -ano | findstr 端口号`命令查找进程PID,然后通过任务管理器或`taskkill /PID PID号`命令来结束进程。
Windows中如何查看被占用的端口、杀掉对应的进程
|
2月前
|
JavaScript Windows
NodeJs——如何获取Windows电脑指定应用进程信息
NodeJs——如何获取Windows电脑指定应用进程信息
69 0
|
2月前
|
Linux Windows
Windows查找监听端口对应的进程及其路径
Windows查找监听端口对应的进程及其路径
|
4月前
|
Python Windows
在 Windows 平台下打包 Python 多进程代码为 exe 文件的问题及解决方案
在使用 Python 进行多进程编程时,在 Windows 平台下可能会出现将代码打包为 exe 文件后无法正常运行的问题。这个问题主要是由于在 Windows 下创建新的进程需要复制父进程的内存空间,而 Python 多进程机制需要先完成父进程的初始化阶段后才能启动子进程,所以在这个过程中可能会出现错误。此外,由于没有显式导入 Python 解释器,也会导致 Python 解释器无法正常工作。为了解决这个问题,我们可以使用函数。
65 5
|
4月前
|
缓存 数据安全/隐私保护 虚拟化
windows端口被占用,无法通过netstat找到进程,占用的端口又不能修改,该怎么办?
项目运行时服务器8080端口被占用,常规`netstat`命令找不到占用进程。解决方法包括:1) 强制关机重启释放端口;2) 使用`netstat -anobq`或Windows 10的`Get-NetTCPConnection` PowerShell命令查找BOUND状态的进程;3) 调整Windows动态端口范围,避免冲突。注意,强制关机可能影响数据安全。
655 2
|
3月前
|
安全 API Python
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。
`multiprocessing`是Python的一个标准库,用于支持生成进程,并通过管道和队列、信号量、锁和条件变量等同步原语进行进程间通信(IPC)。
|
4月前
|
存储 数据安全/隐私保护 Windows
逆向学习Windows篇:进程句柄操作详解
逆向学习Windows篇:进程句柄操作详解
89 0
|
5月前
|
消息中间件 Linux
【linux进程间通信(二)】共享内存详解以及进程互斥概念
【linux进程间通信(二)】共享内存详解以及进程互斥概念
下一篇
无影云桌面