管道通信的基本流程和代码

(代码摘抄至互联网,具体是哪位我给搞忘了,如果代码原作者看到,麻烦一下告我一声,我好附上代码原作网址,先说一声不好意思了)

管道通信是以字符流形式将数据发送到管道,接受进程也是从管道读取发送端发送的数据,相当于管道就是临时建立的一个缓存区,一种特殊文件,服务端和客户端通过这个缓存区来通信。所以不依赖某种通信协议,可以适用于所有能通信的协议,大大方便了不同协议之间的通信。
当通道建立并且双方连接成功后,通过返回通道的文件句柄,读取和发送消息或数据。

先来说服务端的代码
基本逻辑:

创建管道 → 创建成功,返回文件句柄 → 等待连接 → 连接成功 → 开始通信 → 通信完毕,关闭连接
|
等待连接→阻塞进程。等待连接

(1)服务器代码:
创建管道,通过CreatNamePipe()创建;
在这里插入图片描述
先定义一个字符串,用于保存要发送的信息,DWORD定义一个32位整数,用于保存返回值。
创建完成后,用INVALID_HANDLE_VALUE来校验管道是否创建成功,这个关键字的作用就是校验管道的文件句柄是否合法。
在这里插入图片描述
if 判断是否合法,如果不合法,则创建失败,反之则阻塞进程,等待连接。利用ConnectNamePipe()检验是否有客户端连接,如果没有就继续等待。

如果创建成功并且连接成功,则双方开始通信其中发送信息用WriteFile(),相当于在管道文件内写入文件。接受信息用ReadFile(),读写管道内服务器发送的信息。
在这里插入图片描述
这里while循环判断值是Ture,意思就是如果在连接状态,就不断发送和接受信息。直到没有连接。ConnecNamePipe()返回值为空,就利用CloseHandle(管道名,不是管道文件名)关闭管道。

(2)客户端代码:

在这里插入图片描述
开始延迟一定时间,才执行下面的代码是为了等待服务器创建完成,再开始连接。
定义一个布尔值变量,保存连接状态,用来判断连接是否成功。
在这里插入图片描述
发送和接受信息与服务器一致,每隔一定时间发送一次,如果无连接,则关闭管道。
(我也是小白,有不足的地方还多多包涵)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值