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

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

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

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

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

订正:

由于使用了公共对话框,因此在程序的包含文件中增加一项#include:
Windows编程之网络之邮件槽通讯
另,若对程序中不停出现的4996号Warning感到厌烦,可添加上图中最后一行的#pragma命令。

在WinLearn中新建工程WinStep3;

1、在菜单中添加一个顶层菜单,然后在顶层菜单下添加4个子菜单,如图:
Windows编程之网络之邮件槽通讯
图1 菜单设计
Windows编程之网络之邮件槽通讯
表2 菜单项设置

2、在快捷键表中添加4个快捷键。
Windows编程之网络之邮件槽通讯
图2 快捷键设计

3、设计网络消息。
Windows编程之网络之邮件槽通讯
程序片段24 网上传输的消息
Windows编程之网络之邮件槽通讯
程序片段25 全局变量
Windows编程之网络之邮件槽通讯
程序片段26 主程序,注意其中左侧特出的地方为初始化

4、 消息处理函数WndProc部分代码。
Windows编程之网络之邮件槽通讯
程序片段27 鼠标左键按下时记录上次的点
Windows编程之网络之邮件槽通讯
程序片段28 对选择画笔的菜单项的代码
Windows编程之网络之邮件槽通讯
程序片段29 鼠标移动时画出轨迹并广播
Windows编程之网络之邮件槽通讯
程序片段30 每隔50ms检索广播消息并直接画出

相关文章:

  • 2022-12-23
  • 2021-04-29
  • 2021-11-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
猜你喜欢
  • 2022-01-20
  • 2021-05-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-08
  • 2022-12-23
相关资源
相似解决方案