第6节 使用邮件槽传输数据

网络通讯的理论很复杂,可是初学者不考虑性能的话,可以使用很简单的模式。一般而言网络通讯有两种模式,点对点模式或者广播模式。点对点模式就像一对一辅导,双方都能听清楚对方说什么,并作出相应的处理,若是因网络故障丢失数据,双方都知道中间出了问题,可以重新发送数据来解决这个故障;广播模式就像课堂教学,老师无法确信受众们都听清了所说的内容,若某个同学因某种原因而丢包,老师并不知道这个包已经被丢失了。

邮件槽分为收件箱和发件箱两类。收件箱接收网络上发来的邮件包,而发件箱向其他电脑(也可以是本机)发送邮件。发送邮件时,需要指定接收者的IP地址,或者使用表示广播给全局域网的收件箱;接收数据稍微复杂点,因为必须事先建好收件箱(CreateMailslot)其他人发给你的邮件才有可能收到,若是其他人发邮件时该收件箱已经被注销,那么就收不到邮件了。在建立邮件槽的时候,邮件槽必须具有下面的形式:\.\mailslot[path]name这个形式中,前缀\.\mailslot\是必不可少的,而且注意都是小写字符。写到C语言程序里,就应该是这样的形式"\\.\mailslot\"。其中的.表示本地计算机。若是想把消息包发送到远程计算机,远程计算机的邮件槽具有“\Computername\mailslot"这样的形式,若是想要广播到全局域网,则应使用"\\mailslot"这样的形式。当然,本地计算机没有创建远程邮件槽的权利,因此不用使用CreatMailslot函数,若想要发送到远程计算机,则使用CreateFile就可以了。

本地计算机名称可以通过GetComputerName函数获得。代码没有给出,请同学们自行查询帮助。

下面以一个共享画板为例。参与画板的每个人可以选择一种颜色画笔,然后在公共画板上做图。程序通过邮件槽共享鼠标信息,程序中使用了公共对话框来选择一种颜色;

订正:

由于使用了公共对话框,因此在程序的包含文件中增加一项#include:

另,若对程序中不停出现的4996号Warning感到厌烦,可添加上图中最后一行的#pragma命令。

在WinLearn中新建工程WinStep3;

1、在菜单中添加一个顶层菜单,然后在顶层菜单下添加4个子菜单,如图:

图1 菜单设计

表2 菜单项设置

2、在快捷键表中添加4个快捷键。

图2 快捷键设计

3、设计网络消息。

程序片段24 网上传输的消息

程序片段25 全局变量

程序片段26 主程序,注意其中左侧特出的地方为初始化

4、 消息处理函数WndProc部分代码。

程序片段27 鼠标左键按下时记录上次的点

程序片段28 对选择画笔的菜单项的代码

程序片段29 鼠标移动时画出轨迹并广播

程序片段30 每隔50ms检索广播消息并直接画出

Windows编程之网络之邮件槽通讯相关推荐

  1. 进程间通讯(一)--邮件槽

    邮件槽提供了不可靠的单向数据传输,但是邮件槽支持多播.邮件槽服务器使用CreateMailslot函数来创建一个邮件槽.C热阿特Mailslot接受形如"\\.\\Mailslot\Mail ...

  2. (6)Windows下的网络编程

    目录索引 Windows下的网络编程 接口分析 编程差异 编程示例 多路复用 Windows下的网络编程 接口分析 Windows下的socket编程接口与Linux中几乎相同: 不同之处: – 返回 ...

  3. Windows下的网络编程Winsock

    文章目录 前言 1.服务器下的Winsock 1.1.构建编程环境: 1.2.WSAData结构体 1.3.WSAStartup初始化Winsock 1.4.WSACleanup释放Winsock 1 ...

  4. windows多线程和网络编程

    第 10 章  多线程与网络编程初步  教学提示:Windows 是一个支持多任务的操作系统.当在一个程序中需要启动另外一 个程序时,需要用到多进程的编程方式.如果一个进程中有一些相似的任务需要同时推 ...

  5. win32下进程间通信方式之管道、邮件槽、剪切板、共享内存、消息、套接字、RPC、DDE等

    #include "stdafx.h"/*32位Windows采用虚拟内存技术使每个进程虚拟4G内存,在逻辑上实现了对进程之间数据代码的分离与保护.那么相应的进程之间的通信也就有必 ...

  6. (47)LINUX应用编程和网络编程之二Linux文件属性

    Linux下的文件系统为树形结构,入口为/ 树形结构下的文件目录: 无论哪个版本的Linux系统,都有这些目录,这些目录应该是标准的.各个Linux发行版本会存在一些小小的差异,但总体来说,还是大体差 ...

  7. Windows编程革命简史

    起初,世上有Windows API和DLL Hell.然后有了DDE,史称第一次Windows编程革命--还记得怎么通过动态链接在状态栏上显示Microsoft股票的即时价格吗? 差不多同时,Micr ...

  8. 网络编程:网络协议简介

    这是张富涛的第10篇原创 网络编程:网络协议简介 网络协议在网络编程中是一个比较神秘的概念,今天就由我们揭开它神秘的面纱吧. 1. 什么是网络协议? 网络协议是指对于网络中传输的数据格式的规定.在计算 ...

  9. C# 在Windows系统下使用蓝牙进行数据通讯

    1.蓝牙介绍 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接. 蓝牙作为一种小范围无线连接技术,能在设备间实 ...

最新文章

  1. 江苏谋定特色小镇-农业大健康·万祥军:旅游理念经营产业
  2. 简单解决“ORA-27100: shared memory realm already exists”的问题
  3. 在Windows XP中对系统文件(页面文件和注册表)进行碎片整理
  4. Python最常用的函数、基础语句有哪些?你都知道吗
  5. 多任务实现-协程(python 版)
  6. android git 版本管理,Android版本管理(git 和 repo)
  7. Bailian4007 计算字符串距离【DP】
  8. Android SharedPreferences的简单使用
  9. ajax简单异步图片上传,Ajax简单异步上传图片并回显
  10. 在手机上怎么修改图片格式?图片怎么转png格式?
  11. 【AutoCAD】04.直线类命令
  12. c语言round函数作用,if条件函数怎样和round一起用?!,C++中round函数怎么用
  13. excel打印时显示服务器脱机怎么办,excle正在访问打印机!连接局域网打印机在excel中预览,excel自动就关闭是怎么回事...
  14. 计算机无法进入bios模式,电脑系统无法进入bios界面解决方法
  15. 英雄联盟服务器维护2019.4.5,lol维护公告最新时间 英雄联盟11.9版本4月29日更新内容...
  16. LeetCode题解(0695):岛屿的最大面积(Python)
  17. html微信气泡插件,微信加上个性化插件工具,瞬间逼格满满
  18. AOP-自定义advice
  19. Neo4j 4.x版本与jdk11的下载
  20. ubuntu18.04 aria2 GUI 的安装使用

热门文章

  1. Java Code Geeks和Packt提供的Hadoop书籍赠品
  2. 具有GlassFish和一致性的高性能JPA –第1部分
  3. Java应用程序中的消息传递主体
  4. Linux 命令之 iostat 命令-监视系统输入输出设备和 cpu 的使用情况
  5. web project、web service project和java project的区别
  6. springBoot中自定义的yml文件引用的方式
  7. java代码审计ssrf危险函数_某租车系统Java代码审计之后台注入漏洞分析
  8. g++ 安装python_以后再也不用“教程”:让人举一反三的python配置环境过程 + 超简单原理概括!...
  9. 企业是否应该实现对客户需求的快速响应_CRM系统给企业带来的创新有哪些?如何让销售爱用CRM系统?...
  10. 0与1世界的初级编程篇之C语言