(代码摘抄至互联网,具体是哪位我给搞忘了,如果代码原作者看到,麻烦一下告我一声,我好附上代码原作网址,先说一声不好意思了)
管道通信是以字符流形式将数据发送到管道,接受进程也是从管道读取发送端发送的数据,相当于管道就是临时建立的一个缓存区,一种特殊文件,服务端和客户端通过这个缓存区来通信。所以不依赖某种通信协议,可以适用于所有能通信的协议,大大方便了不同协议之间的通信。
当通道建立并且双方连接成功后,通过返回通道的文件句柄,读取和发送消息或数据。
先来说服务端的代码
基本逻辑:
创建管道 → 创建成功,返回文件句柄 → 等待连接 → 连接成功 → 开始通信 → 通信完毕,关闭连接
|
等待连接→阻塞进程。等待连接
(1)服务器代码:
创建管道,通过CreatNamePipe()创建;
先定义一个字符串,用于保存要发送的信息,DWORD定义一个32位整数,用于保存返回值。
创建完成后,用INVALID_HANDLE_VALUE来校验管道是否创建成功,这个关键字的作用就是校验管道的文件句柄是否合法。
if 判断是否合法,如果不合法,则创建失败,反之则阻塞进程,等待连接。利用ConnectNamePipe()检验是否有客户端连接,如果没有就继续等待。
如果创建成功并且连接成功,则双方开始通信其中发送信息用WriteFile(),相当于在管道文件内写入文件。接受信息用ReadFile(),读写管道内服务器发送的信息。
这里while循环判断值是Ture,意思就是如果在连接状态,就不断发送和接受信息。直到没有连接。ConnecNamePipe()返回值为空,就利用CloseHandle(管道名,不是管道文件名)关闭管道。
(2)客户端代码:
开始延迟一定时间,才执行下面的代码是为了等待服务器创建完成,再开始连接。
定义一个布尔值变量,保存连接状态,用来判断连接是否成功。
发送和接受信息与服务器一致,每隔一定时间发送一次,如果无连接,则关闭管道。
(我也是小白,有不足的地方还多多包涵)