• [C++] socket -8 [命名管道]


    ::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一进行传输。

     1 /*
     2 命名管道服务器
     3 */
     4 #include<windows.h>
     5 #include<stdio.h>
     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("创建管道成功,正在等待客户端连接!
    ");
    15     if(::ConnectNamedPipe(hpip,&ovi))//等待客户端的连接请求
    16     {
    17         printf("客户端连接成功
    ");
    18         printf("正在读取数据!
    ");
    19         if(ReadFile(hpip,buf,200,&readbuf,NULL))//读取管道数据
    20         {
    21             printf("读取数据成功!
    ");
    22             printf("读取数据是: %s
    ",buf);
    23         }
    24         else 
    25         {
    26             printf("读取数据失败
    ");
    27         }
    28     }
    29     ::Sleep(10000);
    30     return 0;
    31 }
     1 /*
     2 命名管道客户端
     3 */
     4 #include<windows.h>
     5 #include<stdio.h>
     6 int main()
     7 {
     8     HANDLE hpip;
     9     OVERLAPPED ovi={0};
    10     char buf[]="命名管道测试程序!
    ";//定义数据缓冲区
    11     DWORD readbuf;//定义结构体变量
    12     printf("正在连接命名管道!
    ");
    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("打开命名管道失败
    ");
    20         }
    21         else
    22         {
    23             if(WriteFile(hpip,buf,sizeof(buf),&readbuf,NULL))//写入数据到管道
    24             {
    25                 printf("数据写入成功!
    ");
    26             }
    27             else 
    28             {
    29                 printf("数据写入失败
    ");
    30             }
    31         }
    32     }
    33     else 
    34     {
    35         printf("管道创建失败!
    ");
    36     }
    37     ::Sleep(10000);
    38     return 0;
    39 }
  • 相关阅读:
    算法与数据结构基础
    算法与数据结构基础
    算法与数据结构基础
    分布式系统理论进阶
    分布式系统理论进阶
    分布式系统理论基础
    分布式系统理论进阶
    分布式系统理论基础
    dht 分布式hash 一致性hash区别
    排期模板
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3692960.html
Copyright © 2020-2023  润新知