Delphi 使用管道进程间通讯

来源:互联网 发布:epoll 高性能网络库 编辑:程序博客网 时间:2024/06/05 20:20

发起进程:创建管道,发送数据,接受反馈数据

Const  PipeName = '\\.\pipe\Test';  PipeSize = 1000;  PipeTimeOut = 3000;procedure PipeServer();var  Se:TSecurityAttributes;  SPipeHandle:THandle;  Buffer:Pchar;  WriteBuffer:DWORD;begin  Se.nLength:=Sizeof(TSecurityAttributes);  Se.lpSecurityDescriptor:=nil;  Se.bInheritHandle:=True;  SPipeHandle:=CreateNamedPipe(PipeName,  PIPE_ACCESS_DUPLEX OR FILE_FLAG_WRITE_THROUGH,  PIPE_TYPE_BYTE   or   PIPE_WAIT,  1,PipeSize,PipeSize,PipeTimeOut,@Se);  Buffer:=AllocMem(1000);  if SPipeHandle<> 0 then    begin      while True do        begin          if ConnectNamedPipe(SPipeHandle,nil) then            begin               Buffer:=PChar(IntToStr(GetTickCount));               //写入数据               WriteFile(SPipeHandle,Buffer[0],Length(Buffer),WriteBuffer,nil);               Sleep(500);               //等待反馈数据               ReadFile(SPipeHandle,Buffer[0],PipeSize,WriteBuffer,nil);               DisConnectNamedPipe(SPipeHandle);            end;          Sleep(2000);        end;       CloseHandle(SPipeHandle);    end;  FreeMemory(Buffer);end;

监听进程:接受数据,反馈数据

Const  PipeName = '\\.\pipe\Test';  PipeSize = 1000;procedure PipeClient();var    Buffer:Array [0..1000] of Char;    Requst:PChar;    ReadSize:DWORD;    hPipe:Thandle;begin   while True do     begin        if WaitNamedPipe(PipeName,NMPWAIT_WAIT_FOREVER) then          begin              hPipe:=CreateFile(PipeName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,NiL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE or FILE_FLAG_WRITE_THROUGH, 0);        if hPipe <> INVALID_HANDLE_VALUE   then             begin          ReadSize:=0;         ReadFile(hPipe,Buffer[0],PipeSize,ReadSize,nil);       if ReadSize > 0 then     begin             //收到数据                    Requst:= Pchar(Format('%s OK',[Buffer]));                //写入反馈                         WriteFile(hPipe,Requst[0],Length(Requst),ReadSize,nil);                end;               CloseHandle(hPipe);             end;        end;   end;end;

原创粉丝点击