• 邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输。
  • 邮槽是一种单向通信机制,创建邮槽的服务器进程读取数据,打开邮槽的客户端写入数据。
  • 邮槽可以实现一对多的单向通信。但是数据量小,通常都是424字节以下。假设client1先send,client2再send,最后server可以连续receive两次
  • 如果是网络通信,server的名称写".",client写服务器电脑名或ip地址

1. 过程

a. server 先CreateMailslot
b. client 再CreateFile连接之前的mailSlot
c. client writeFile
d. server readFile

2.该函数利用指定的名称来创建一个邮槽,然后返回所创建的邮槽的句柄。

HANDLE    WINAPI   CreateMailslot(__in          LPCTSTR lpName,__in          DWORD nMaxMessageSize,__in          DWORD lReadTimeout,__in_opt      LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
  • 参数 lpName
    指定了将要创建的邮槽的名称,该名称的格式必须为 \.\mailslot\MailslotName。
    在这里需要注意的是两个斜杠后的那个 “.”,在这里使用圆点代表的是本地机器,

  • 参数 nMaxMessageSize
    用来指定可以被写入到邮槽的单一消息的最大尺寸,为了可以发送任意大小的消息,需要将该参数设置为 0 。

  • 参数 lReadTimeOut
    指定读取操作的超时时间间隔,以毫秒作为单位。
    读取操作在超时之前可以等待一个消息被写入到邮槽中,如果将这个值设置为 0 ,那么若没有消息可用的话,该函数将立即返回。如果将该值设置为 MAILSLOT_WAIT_FOREVER,则该函数会一直等待,直到有消息可用。

  • 参数 lpSecurityAttributes
    一般设置为 NULL 即可,即采用 Windows 默认的针对于邮槽的安全性。

3. code

server:

  HANDLE hMailslot;hMailslot=CreateMailslot("\\\\.\\mailslot\\MyMailslot",0,MAILSLOT_WAIT_FOREVER,NULL);if(INVALID_HANDLE_VALUE==hMailslot){MessageBox("创建邮槽失败!");return;}char buf[100];DWORD dwRead;if(!ReadFile(hMailslot,buf,100,&dwRead,NULL)){MessageBox("读取数据失败!");CloseHandle(hMailslot);return;}MessageBox(buf);CloseHandle(hMailslot);

client

HANDLE hMailslot;hMailslot=CreateFile("\\\\.\\mailslot\\MyMailslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if(INVALID_HANDLE_VALUE==hMailslot){MessageBox("打开邮槽失败!");return;}char buf[]="http://www.sunxin.org";DWORD dwWrite;if(!WriteFile(hMailslot,buf,strlen(buf)+1,&dwWrite,NULL)){MessageBox("写入数据失败!");CloseHandle(hMailslot);return;}CloseHandle(hMailslot);

【引用】

  1. 代码 https://github.com/thefistlei/os/tree/main/processCommunication/mailSlot
  2. VC++ 深入详解 孙鑫

进程间通信(6) 邮槽相关推荐

  1. [Win]进程间通信——邮槽Mailslot

    进程间通信 进程的地址空间是私有的.出于安全性的目的,如果一个进程不具有特殊的权限,是无法访问另外一个进程的内存空间的,也无法知道内存中保存的数据的意义.但是在一些具体的应用情况下需要多个进行相互配合 ...

  2. 进程间通信(7) “剪贴板“、“匿名管道“、“命名管道“、“邮槽“4种方式总结

    1. 剪贴板和匿名管道只能同一-台机器上 命名管道和邮槽还可以实现跨网络的进程间通信; 邮槽是基于广播通信的,可以一对多的单向通信, 数据量较小,通常都是在424字节以下 命名管道只能点对点的单一的通 ...

  3. 进程间通信 - 邮槽实现

    引子 前面的一篇博文介绍了进程之间通信的一种最为简单的方式, 也就是在本地进程之间通过剪贴板来实现进程间通信,而剪贴板自有其缺陷, 很显然的是,剪贴板只能在本地机器上实现, 无法实现本地进程与远程服务 ...

  4. 【免杀前置课——Windows编程】十、进程间通信(COPY_DATA通信,邮槽通信)、实现两进程通信(附代码)

    进程间通信 进程间通信 1.COPY_DATA方式 2.邮槽的方式 实现两进程通信 进程接收端 进程发送端 错误调试小技巧 进程间通信 每个进程都有自己独立的4G内存空间,彼此是不能直接互相访问的.如 ...

  5. 《Windows核心编程》---邮槽通信

    邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠UDP数据传输协议.使用邮槽通信的进程分为客户端和服务端,邮槽由服务端创建,创建后,客户端可以通过邮槽名打开邮槽,在获得邮槽句柄后可以向邮槽写入消 ...

  6. windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题...

    邮槽创建在服务程序内,可以创建成功, 但外部客户端连接时 m_hMailslot = CreateFile("\\\\.\\mailslot\\zdpMailslot",GENER ...

  7. createfile 无权限_windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题...

    邮槽创建在服务程序内,可以创建成功, 但外部客户端连接时 m_hMailslot = CreateFile("\\\\.\\mailslot\\zdpMailslot",GENER ...

  8. [WinApi]邮槽通信C/S实例

    Just a test.高手无视. 服务端: //Code by Pnig0s1992 //Date:2012,3,19 #include <stdio.h> #include <W ...

  9. Linux、Windows进程间通信

    Linux的进程间通信主要有管道.命名管道.消息队列.共享内存.信号量, Windows进程间通信有三个:匿名管道.命名管道(又叫FIFO).邮槽(MailSlot),实际上常用的还有一个:共享内存.

最新文章

  1. 利用源代码搭建lnmp环境
  2. 点云网络的论文理解(六)-Frustum PointNets 总体概括
  3. 查询SDE数据库,GSON报错:declares mutiple JSON fields named data
  4. BeetleX服务网关授权配置
  5. 阿里巴巴制定了这 16 条
  6. java 调试 工具_Java调试器–权威的工具列表
  7. hazelcast_带弹簧的Hazelcast分布式执行
  8. css高度已知,左右定宽,中间自适应三栏布局
  9. apache mesos_试用Apache Mesos HTTP API获得乐趣和收益
  10. react学习(47)----react中initialValue和value不能一起定义
  11. 在mount里看到哪个设备文件的一些笔记
  12. isis network-entity 49含义_电影《狮子王》真人版上映,经典英语台词背后的含义你看懂了吗...
  13. python3.7运行报错_Python 3.7 环境下运行 scrapy crawl 报错 def write(self, data, async=False)?...
  14. Pig安装及简单使用(pig0.12.0 hadoop2.2.0)
  15. Enterprise Library
  16. 工作记忆的认知神经科学
  17. Java编程那些事儿
  18. 【Ubuntu】 解决中文输入问题 --- 安装搜狗拼音输入法
  19. SpringCloud 微服务架构开源项目,适合接私活、毕业设计(附源码)
  20. HashMap引发死链问题(HashMap、ConcurrentHashMap原理解析)

热门文章

  1. html5 datalist属性,HTML5 元素 datalist 介绍
  2. python 标准错误输出_过程的实时标准输出/错误捕获
  3. mysql主从数据库怎么还口令,mysql数据库主从同步方法讲解
  4. 不同品牌发电机组间的并机知识
  5. 数据中心电池室管理之经济实用性方法的探索
  6. 学校机房项目交换机的配置:
  7. ML之xgboost:解读用法之xgboost库的core.py文件中的get_score(importance_type=self.importance_type)方法
  8. 成功解决Exception: Graph file doesn't exist, path=F:\File_Python\Python_example\Human_Posture_Detection\
  9. 成功解决TypeError: Object of type 'ndarray' is not JSON serializable
  10. redis读取自增时候指定的key问题