命名管道

来源:互联网 发布:数据分析师月薪 编辑:程序博客网 时间:2024/05/17 00:10

实际上都是一种相关通信概念而已,了解并掌握相关操作步骤和流程即可.

注意点:

1.管道是一种半双工概念的,如若想读写互补干扰,最好创建两个管道.(想想管道与自来水间的关系)

2.区别命名管道和匿名管道的区别,匿名管道是能用于存在福进程,也就是具有继承关系的继承来通信,命名管道可以用于网络,也可以用于主机内部进程间通信.

服务器端:创建命名管道 ,等待连接 ,通过readfile/writefile读写数据 关闭连接,关闭通道句柄.

#include "stdafx.h"


#include <stdio.h>  
#include <windows.h>  
#include <conio.h>  
const char *pStrPipeName = "\\\\.\\pipe\\NamePipe_MoreWindows";  
  
int _tmain(int argc, _TCHAR* argv[])
{
// 服务器这边操作流程:创建命名管道 ,等待连接 ,通过readfile/writefile读写数据 关闭连接,关闭通道句柄.
HANDLE hPipe = CreateNamedPipe(pStrPipeName, PIPE_ACCESS_DUPLEX,   
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,   
PIPE_UNLIMITED_INSTANCES, 0, 0, NMPWAIT_WAIT_FOREVER, 0);  
if (ConnectNamedPipe(hPipe, NULL) != NULL)//等待连接。  
{  
printf("连接成功,开始接收数据\n");  


const int BUFFER_MAX_LEN = 256;  
char szBuffer[BUFFER_MAX_LEN];  
DWORD dwLen;  


//接收客户端发送的数据  
ReadFile(hPipe, szBuffer, BUFFER_MAX_LEN, &dwLen, NULL);//读取管道中的内容(管道是一种特殊的文件)  
printf("接收到数据长度为%d字节\n", dwLen);  
printf("具体数据内容如下:%s\n", szBuffer);  


//确认已收到数据  
printf("向客户端发送已经收到标志\n");  
strcpy(szBuffer, "服务器已经收到");  
WriteFile(hPipe, szBuffer, strlen(szBuffer) + 1, &dwLen, NULL);  
}  
DisconnectNamedPipe(hPipe);   
CloseHandle(hPipe);//关闭管道  
return 0;  




return 0;
}


客户端流程:连接匿名管道,打开匿名管道,并进行读写


0 0
原创粉丝点击