第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检索广播消息并直接画出