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;
返回实例句柄,以供调用。