RSS订阅 | 匿名投稿
您的位置:网站首页 > 进程 > 正文

Delphi 使用管道进程间通讯

作者:admin 来源: 日期:2018/1/19 20:39:32 人气: 标签:

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

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;  


读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址:
下一篇:没有资料