Windows 命名管道 - 服务器端
以下代码为DLL库中的单元文件。
服务器代码:
UnmpSrv.pas(*-------------------------------------------------------------------------- Delphi菜鸟XiaoBin 2006.5.31于黑龙江草甸子 http://blog.csdn.net/xiaobin_hlj80 veic_2005@163.com --------------------------------------------------------------------------*) // 2006.12.22 // xiaobin unit UnmpSrv; interface uses Windows; const PIPE_BUF_SIZE = 254; PIPE_TIMEOUT = 120000; var m_hOutPipe: THandle; function CreateNamedPipeServer: DWORD; stdcall; implementation function CreateNamedPipeServer: DWORD; begin //create server->client m_hOutPipe := CreateNamedPipe('\\.\pipe\xiaobin', PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE, 5, PIPE_BUF_SIZE, 0, PIPE_TIMEOUT, nil); if ((m_hOutPipe = 0)or(m_hOutPipe = INVALID_HANDLE_VALUE))then begin CloseHandle(m_hOutPipe); Result := 0; end; if ConnectNamedPipe(m_hOutPipe, nil) = true then begin if GetLastError = ERROR_PIPE_NOT_CONNECTED then begin Result := 0; end; end else begin CloseHandle(m_hOutPipe); Result := 0; end; Result := m_hOutPipe; end; end.
首先,CreateNamedPipe函数在API中的定义如下:
HANDLE WINAPI CreateNamedPipe( __inLPCTSTR lpName, __inDWORD dwOpenMode, __inDWORD dwPipeMode, __inDWORD nMaxInstances, __inDWORD nOutBufferSize, __inDWORD nInBufferSize, __inDWORD nDefaultTimeOut, __in_optLPSECURITY_ATTRIBUTES lpSecurityAttributes );
参数:
lpName: 管道名称;
dwOpenMode: 打开模式; 有三种模式:双向(server <-> client)、单向1(server <- client)、单向2(server -> client )
dwPipeMode: 管道的数据流模式; 有两种:PIPE_TYPE_BYTE和PIPE_TYPE_MESSAGE。使用字符串多一些的时候建议使用Message模式。
nMaxInstances: 可以连接的客户端数量;范围为1~255。
nOutBufferSize: 缓冲输出大小;
nInBufferSize: 缓冲输入大小;因为使用单向,所以设为0;
nDefaultTimeOut: 超时设定;单位为毫秒。
最后一个参数为可选。设为空。
如果实例值等于0或者无效,则关闭句柄,并返回0;
test命名管道,如果存在,是否存在错误,不存在关闭句柄,并返回0;
返回实例句柄,以供调用。