命名管道
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;
}
客户端流程:连接匿名管道,打开匿名管道,并进行读写
注意点:
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;
}
客户端流程:连接匿名管道,打开匿名管道,并进行读写
相关文章推荐
- 命名管道
- provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接
- Linux入门:命名管道
- 在.NET中使用命名管道完成进程间通信[转]
- (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 的解决方案
- 4——命名管道
- 多线程编程实例----进程通信之命名管道
- 命名管道
- 配置远程客户机使用命名管道协议访问SQL服务器
- Linux_ mkfifo 命名管道 操作demo
- Linux系统编程——进程间通信:命名管道(FIFO)
- 进程间通信(1)---匿名管道与命名管道
- 命名管道
- 命名管道(FIFO)
- 智能预判 (四:命名管道连接逻辑和通信)
- 命名管道--简单的客户服务器通信
- 匿名管道与命名管道
- 匿名和命名管道(windows)
- 管道和命名管道(windows)
- 采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序