Windows 命名管道1

news/2025/2/9 8:49:49

Windows 命名管道 - 客户端


概述:

命名管道是通过网络来完成进程间的通信的,它屏蔽了底层的网络协议细节。
所以在不了解网络协议的情况下,也可以利用命名管道来实现进程间的通信。
命名管道充分利用了Windows NT和Windows 2000内建的安全机制。
命名管道是围绕Windows文件系统设计的一种机制,采用“命名管道文件系统(Named Pipe File System,NPFS)”接口。
将命名管道作为一种网络编程方案时,它实际上建立了一个客户机/服务器通信体系,并在其中可靠地传输数据。
创建管道的进程称为管道服务器,连接到一个管道的进程称为管道客户机。
管道服务器和一台或多台管道客户机进行单向或双向的通信。
一个命名管道的所有实例共享同一个管道名,但是每一个实例均拥有独立的缓存与句柄,
并且为客户——服务通信提供一个分离的管道。
实例的使用保证了多个管道客户能够在同一时间使用同一个命名管道。


以下代码为DLL库中的单元文件。


客户端代码:

UnmpClient.pas

(*-------------------------------------------------------------------------- Delphi菜鸟XiaoBin 2006.5.31于黑龙江草甸子 http://blog.csdn.net/xiaobin_hlj80 veic_2005@163.com --------------------------------------------------------------------------*) // 2006.12.22 // xiaobin unit UnmpClient; interface uses Windows; var m_hInPipe:THandle; function CreateNamedPipeClient:DWORD;stdcall; implementation function CreateNamedPipeClient:DWORD; var connPipe:Boolean; begin connPipe := WaitNamedPipe('\\.\pipe\xiaobin',120000); if connPipe = false then begin Result := 0; end; m_hInPipe := CreateFile('\\.\pipe\xiaobin', GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (m_hInPipe=0) or (m_hInPipe=INVALID_HANDLE_VALUE) then begin //CloseHandle(m_hInPipe); Result := 0; end; Result := m_hInPipe; end; end.
客户端主要调用2个API函数:

WaitNamedPipe、CreateFile第一个函数功能为是否有一个我们已知的命名管道,没有返回0;

第二个函数功能为连接一个我们已知的命名管道,失败返回0;




http://www.niftyadmin.cn/n/4747423.html

相关文章

创建MiniGUI自定义控件

创建MiniGUI自定义控件 include <STDIO.H> #include <MINIGUI common.h> #include <MINIGUI minigui.h> #include <MINIGUI gdi.h> #include <MINIGUI window.h> #include <MINIGUI control.h> #include <…

实现文件的上传

建立表格&#xff1a; Java代码: UploadServlet1.java文件 doPost()方法交给doGet()方法处理 doPost()方法&#xff1a; 关于代码中一些问题的简要说明&#xff1a;

金山快盘

2011年&#xff0c;或许是一个“云计算”年&#xff0c;我到现在都不太清楚云计算到底是神马东西&#xff0c;众说纷云啊&#xff0c;貌似金山快盘也是云计算的一种。 之前一直在用快盘&#xff0c;但是最近这些日子没怎么用&#xff0c;快盘是好&#xff0c;但是并不是所有的资…

ARM926的Linux工具链的制作(续 : 基于uclibc)

本次制作与前一篇类似&#xff0c;出来用uClibc代替了Glibc 下载的代码目录 root: /home/lake/arm-uclibc-linux 目标目录 dir: /home/lake/arm-uclibc-linux/uclibc-tools 1. 准备工作: 下载 Binutil2.17/Gcc3.4.6/uClibc0.9.28/Linux-kernel2.6.24 Patch: URL: …

Silverlight开发历程—(ImageBrush图像画刷和WriteableBitmap绘制位图)

利用Image呈现图像&#xff0c;有一点比较重要&#xff0c;就是Image元素的枚举类型属性Stretch&#xff0c;Stretch主要是来确定Image的填充方式&#xff0c;Stretch枚举类型值分别为&#xff1a;None&#xff08;原始尺寸&#xff09;、Fill&#xff08;填充拉伸&#xff09;…

Windows下OpenCV(VC+Python)安装手记

一直都是Linux下开发OpenCV&#xff0c;为了符合上课要求便转战Windows。 但跨平台的东西在windows上安装起来就是感觉费劲&#xff0c;本来一个apt-get install解决的东西&#xff0c;定是要配置那么多东西。 总结了一下&#xff1a; 本机环境Windows Vista 32bit ,Visual …

何时使用 extern C

extern "C" 解析 时常在cpp的代码之中看到这样的代码: #ifdef __cplusplusextern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢&#xff1f;首先&#xff0c;__cplusplus是cpp中的自定义宏&#xff0c;那么定…

qt学习笔记(三) QString char int之间的转换

char * 与 const char *的转换 char *ch1"hello11"; const char *ch2"hello22"; ch2 ch1;//不报错&#xff0c;但有警告 ch1 (char *)ch2; char 转换为 QString 其实方法有很多中&#xff0c;我用的是&#xff1a; char ab; QString str; strQString(a);…