作者:谢莹UiK_1928 | 来源:互联网 | 2024-09-27 17:36
::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一
::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一进行传输。
1 /*
2 命名管道服务器
3 */
4 #include
5 #include
6 int main()
7 {
8 HANDLE hpip;//定义命名管道句柄
9 OVERLAPPED ovi={0};//定义结构体变量
10 char buf[200];//定义数据缓冲区
11 DWORD readbuf;//获取实际读取字节数
12 hpip=CreateNamedPipe("\\\\.\\pipe\\pipename",PIPE_ACCESS_DUPLEX,
13 PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,1024,1024,0,NULL);//创建命名管道
14 printf("创建管道成功,正在等待客户端连接!\r\n");
15 if(::ConnectNamedPipe(hpip,&ovi))//等待客户端的连接请求
16 {
17 printf("客户端连接成功\r\n");
18 printf("正在读取数据!\r\n");
19 if(ReadFile(hpip,buf,200,&readbuf,NULL))//读取管道数据
20 {
21 printf("读取数据成功!\r\n");
22 printf("读取数据是: %s\r\n",buf);
23 }
24 else
25 {
26 printf("读取数据失败\r\n");
27 }
28 }
29 ::Sleep(10000);
30 return 0;
31 }
1 /*
2 命名管道客户端
3 */
4 #include
5 #include
6 int main()
7 {
8 HANDLE hpip;
9 OVERLAPPED ovi={0};
10 char buf[]="命名管道测试程序!\r\n";//定义数据缓冲区
11 DWORD readbuf;//定义结构体变量
12 printf("正在连接命名管道!\r\n");
13 if(WaitNamedPipe("\\\\.\\pipe\\pipename",NMPWAIT_WAIT_FOREVER))//连接命名管道
14 {
15 hpip=CreateFile("\\\\.\\pipe\\pipename",GENERIC_READ|GENERIC_WRITE,0,
16 NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//打开指定命名管道
17 if(hpip==INVALID_HANDLE_VALUE)
18 {
19 printf("打开命名管道失败\r\n");
20 }
21 else
22 {
23 if(WriteFile(hpip,buf,sizeof(buf),&readbuf,NULL))//写入数据到管道
24 {
25 printf("数据写入成功!\r\n");
26 }
27 else
28 {
29 printf("数据写入失败\r\n");
30 }
31 }
32 }
33 else
34 {
35 printf("管道创建失败!\r\n");
36 }
37 ::Sleep(10000);
38 return 0;
39 }
socket -8 [命名管道],布布扣,bubuko.com