返回

Windows命名管道

发布时间:2023-02-03 15:16:15 293
# c++# 服务器# 数据# 服务器# 信息

命名管道是一种常用的进程间通信手段,它可以单向也可以双工,用于管道服务器与一个或多个管道客户端之间的通信。Windows命名管道提供了两种基本通信模式,字节模式和消息模式。使用中,二者并无本职区别,更多还是由程序员自己选择和控制。在字节模式中,数据以一个连续的字节流的形式在客户机和服务器之间流动。而在消息模式中,客户机和服务器则通过一系列不连续的数据单位进行数据的收发,每次在管道上发出一条消息后,它必须作为一条完整的消息读取。

服务端创建管道流程

  • 创建命名管道:CreateNamedPipe
  • 等待客户端连接:ConnectNamedPipe (会阻塞,等待连接)
  • 读取数据:ReadFile、ReadFileEx
  • 写入数据:WriteFile、WriteFileEx
  • 关闭连接:DisconnectNamedPipe
  • 关闭管道:CloseHandle

客户端连接管道流程

  • 打开命名管道:CreateFile
  • 等待服务端响应:WaitNamedPipe(可选)
  • 切换管道为读模式:SetNamedPipeHandleState(这个API很重要,要和服务端模式匹配,否则会出现数据发送和接收问题)
  • 写入数据:WriteFile、WriteFileEx
  • 读取数据:ReadFile、ReadFileEx
  • 关闭管道:CloseHandle

需要注意的一点是,数据粘连,如果连续发送数据,可能多条消息被另一端同时读取,需要对读取到的数据做细致处理。

核心API

HANDLE CreateNamedPipe(
  [in]           LPCSTR                lpName,                  //管道名称
  [in]           DWORD                 dwOpenMode,              //打开模式:PIPE_ACCESS_INBOUND(服务器只读,客户端仅写入)、PIPE_ACCESS_OUTBOUND(服务器写入,管道客户端为只读)、PIPE_ACCESS_DUPLEX(服务端客户端都可读/写)
  [in]           DWORD                 dwPipeMode,              //管道模式:字节模式、消息模式,各有相关的定义
  [in]           DWORD                 nMaxInstances,           //管道能够创建的最大实例数量
  [in]           DWORD                 nOutBufferSize,          //输出缓冲区大小
  [in]           DWORD                 nInBufferSize,           //输入缓冲区大小
  [in]           DWORD                 nDefaultTimeOut,         //超市时间
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes     //管道属性
);

BOOL ConnectNamedPipe(
  [in]                HANDLE       hNamedPipe,  //管道句柄
  [in, out, optional] LPOVERLAPPED lpOverlapped //如设为NULL,表示将线程挂起,直到一个客户同管道连接为止。否则就立即返回。
);

BOOL SetNamedPipeHandleState(
  [in]           HANDLE  hNamedPipe,           //管道句柄
  [in, optional] LPDWORD lpMode,               //修改模式,对应:字节模式、消息模式,各有相关的定义
  [in, optional] LPDWORD lpMaxCollectionCount, //网络命名管道使用,在传输到服务器之前,客户端计算机上收集的最大字节数,如果客户端和服务器进程位于同一台计算机上,则此参数必须为 NULL
  [in, optional] LPDWORD lpCollectDataTimeout  //网络命名管道使用,可以在远程命名管道通过网络传输信息之前传递的最大时间
);
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
D-Bus简介 2023-02-03 14:36:08