命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节。

  将命名管道作为一种网络编程方案时,它实际上建立了一个C/S通信体系,并在其中可靠的传输数据。命名管道服务器和客户机的区别在于:服务器是唯一一个有权创建命名管道的进程,也只有它能接受管道客户机的连接请求。而客户机只能同一个现成的命名管道服务器建立连接。命名管道提供了两种基本通信模式,字节模式和消息模式。在字节模式中,数据以一个连续的字节流的形式在客户机和服务器之间流动。而在消息模式中,客户机和服务器则通过一系列不连续的数据单位进行数据的收发,每次在管道上发出一条消息后,它必须作为一条完整的消息读入。

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>int _tmain(int argc, _TCHAR* argv[])
{//接受所有安全描述(也就是把管道的连接权限降到最低).SECURITY_ATTRIBUTES sa;SECURITY_DESCRIPTOR sd;if( InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION) ){// add a NULL disc. ACL to the security descriptor.if (SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE)){sa.nLength = sizeof(sa);sa.lpSecurityDescriptor =&sd;sa.bInheritHandle = TRUE;//创建一个命名管道,在windows中\代表zhuan'yi两个\\代表一个\  HANDLE hNamedPipe = CreateNamedPipeA("\\\\.\\pipe\\testName",  PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,  PIPE_TYPE_BYTE, 1, 1024, 1024,0 , &sa);  //检查是否创建成功  if (hNamedPipe == INVALID_HANDLE_VALUE)  {  printf("create named pipe failed!\n");  }  else  Window{  printf("create named pipe success!\n");  }  //异步IO结构  OVERLAPPED op;  ZeroMemory(&op, sizeof(OVERLAPPED));  //创建一个事件内核对象  op.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);  //等待一个客户端进行连接  BOOL b = ConnectNamedPipe(hNamedPipe, &op);  //当有客户端进行连接时,事件变成有信号的状态  if (WaitForSingleObject(op.hEvent, INFINITE) == 0)  {  printf("client connect success!\n");  }  else  {  printf("client connect failed!\n");  }  //连接成功后,进行通信,读写  char  buff[100];  sprintf_s(buff, 100, "test message from server!");  DWORD cbWrite;  WriteFile(hNamedPipe, buff, strlen(buff), &cbWrite, NULL);  ZeroMemory(buff, 100);  ReadFile(hNamedPipe, buff, 100, &cbWrite, NULL);  //通信完之后,断开连接  DisconnectNamedPipe(hNamedPipe);  //关闭管道  CloseHandle(hNamedPipe);  }}system("pause"); return 0;
}

  

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>  int _tmain(int argc, _TCHAR* argv[])
{//检查命名管道是否存在  BOOL b = WaitNamedPipeA("\\\\.\\pipe\\testName", NMPWAIT_WAIT_FOREVER);  //打开管道  HANDLE hFile = CreateFileA("\\\\.\\pipe\\testName",  GENERIC_READ | GENERIC_WRITE,  0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);  //检查是否连接成功  if (!b || hFile == INVALID_HANDLE_VALUE)  {  printf("connect failed!\n");  }  else  {  printf("connect success!\n");  }  //进行通信  char  buf[100];  ZeroMemory(buf, 100);  DWORD dwRead;  ReadFile(hFile, buf, 100, &dwRead, NULL);  printf(buf);  WriteFile(hFile, "test message for client!", strlen("test message for client!"), &dwRead, NULL);  //关闭管道  CloseHandle(hFile);  system("pause"); return 0;
}

  

windows命名管道相关推荐

  1. 浅析Windows命名管道Named Pipe

    目录 管道 命名管道Names Pipes 查看管道列表 命名管道的创建与访问 命名管道的利用 绕过防火墙 模拟令牌(System权限) C2 信道 MS17010和Named Pipe 管道 讲命令 ...

  2. windows命名管道使用方法

    原文地址:https://www.cnblogs.com/lsh123/p/7435401.html 命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节. 将命名管道作为一种网络编程方案 ...

  3. Windows 命名管道 + 异步I/O模型

    一.管道 + 异步I/O 本地通讯模型 1.客户端操作 发送请求 (1) 互斥上锁 CreateMutex, WaitForSingleObject (2) 打开命名管道 OpenNamedPipe ...

  4. java 命名管道_利用Windows命名管道实现IPC的一种有效方法

    我正在使用 jna 模块连接两个同时执行FFMPEG命令的进程.发送 SDTOUT 服务器端的FFMPEG命令到NampedPipe和receive STDIN 我就是这样捕捉的 STDOUT 并发送 ...

  5. 中断和执行子服务器,windows - 命名管道服务器,如何中断或超时等待客户端连接和传入数据 - 堆栈内存溢出...

    一些真实的代码,用于演示GUI应用程序中管道服务器端的异步使用: void wait_for_object(HANDLE object) { DWORD dw; MSG msg; for (;;) { ...

  6. java 命名管道_Java中命名管道的并发读/写(在Windows上)

    我正在尝试使用命名管道在Windows上使用命名管道提供C#应用程序和Java应用程序之间的通信,使用v01ver在此问题中描述的方法: How to open a Windows named pip ...

  7. pythonwindows管道_Python进程间通信之命名管道(Windows)

    前面文章说了一下 Linux 命名管道的实现,今天看看 Windows 上我们怎么实现. 在 Windows 上的命名管道主要是通过调用 win32 api 的以下方法来实现的:win32pipe.C ...

  8. 命名管道学习(简单例程)----Windows进程间通信

    管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机.通常我们把管道分为匿名管道和命名管道.但对于匿名管道的话,只能在本机上进程之间通信, ...

  9. createfile 无权限_Microsoft Windows CreateFile API命名管道权限提升漏洞 | 学步园

    发布时间:2003-07-08 更新时间:2003-07-15 严重程度:高 威胁程度:本地管理员权限 错误类型:设计错误 利用方式:服务器模式 BUGTRAQ ID:8128 CVE(CAN) ID ...

最新文章

  1. java telephony jar,android – 修改framework.jar中的java代码
  2. matlab数组操作
  3. spring面试问题与答案集锦
  4. java gb13000 ucs2_采用GB 13000的UCS-2进行存储的文件怎么转换
  5. python入门基础系列八_03python—9个基础常识-python小白入门系列
  6. js ajax通用方法,目前5个流行的AJAX调用JavaScript库
  7. python中capital是什么意思_Capital是什么意思?
  8. Java多线程第三节-线程的正确停止
  9. c语言编写程序克拉默法则,行列式
  10. AXD 查看register笔记
  11. Android入门教程五之使用AndroidStudio+SDK开发安卓APP
  12. 前端项目发版后用户需要手动刷新页面获取的解决方案
  13. android 项目练习:自己的词典app——生词本(一)
  14. k8s集群配置域名证书支持https与http
  15. css设置图片、边框、背景样式
  16. 欧美著名大学视频课程(ZZ)
  17. 什么是单点登录,单点登录的三种实现方式
  18. 信用卡和借记卡、储蓄卡
  19. k8s开发基础-架构
  20. MongoDB 入门教程实战学习笔记-31-mongo 聚合查询管道 Aggregation Pipieline

热门文章

  1. 7开启uasp协议_Dubbo-go 源码笔记(一)Server 端开启服务过程
  2. centos打显卡驱动命令_CentOS7显卡驱动问题
  3. Oracle数据库的轻松干净卸载
  4. python2安装_Linux 上安装 appium 的辛酸
  5. linux下串口通信程序,关于Linux下串口通信的一点心得
  6. oracle nodemanage,Linux 下Weblogic集群搭建-04通过nodemanage进行节点的启动与关闭
  7. ai模仿声音软件_如何开发人工智能类的软件?人工智能让我们的生活更加便捷!...
  8. java弹出窗放textarea_java中窗体上有一个Button和一个TextArea当鼠标经过按钮上的某一点时在文本框中输出该点的坐标事件...
  9. 安装启动gui卡住_为什么Windows 10升级安装卡住了,原因在这
  10. 怎么用Android做登录界面,利用Android怎么制作一个APP登录界面