您的位置:首页 > 其它

命名管道

2017-02-10 21:09 106 查看
实际上都是一种相关通信概念而已,了解并掌握相关操作步骤和流程即可.

注意点:

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;

}

客户端流程:连接匿名管道,打开匿名管道,并进行读写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: