zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    [转]群控电梯调度算法
    [转] 电梯调度算法总结
    [转]grub2.0和之前版本修复解决方案
    [转]Ubuntu 10.04 编译安装最新版本Linux2.6.34内核
    [转]PS2 键盘工作方式
    [转]个人管理 - 目标管理之前,你会时间管理吗
    [转]ubuntu 下编译内核简单步骤
    [转]关闭Google安全搜索,实现无限制搜索
    [转]Vim 复制粘贴探秘
    [转]Linux文件搜索
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3692960.html
Copyright © 2011-2022 走看看