`
java-mans
  • 浏览: 11439174 次
文章分类
社区版块
存档分类
最新评论

Windows 命名管道1

 
阅读更多

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;



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics