取名管道

命名管道屏蔽了底部的网络协议细节,在未了解网络协议的情事下吧得以用命名管道来促成进程之中通信;命名管道不仅可在本机上贯彻两独过程中的通信,还足以超过网络实现两独过程之中的通信;

1、创建命名管道

  HANDLE CreateNamedPipe(

      LPCTSTR lpName,   

      DWORD dwOpenMode,     

      DWORD dwPipeMode,      

      DWORD nMaxInstances,   

      DWORD nOutBufferSize,  

      DWORD nInBufferSize,   

      DWORD nDefaultTimeOut, 

      LPSECURITY_ATTRIBUTES lpSecurityAttributes 

  );

      lpName:指向一个字符串,该字符串的格式必须也:“\\.\pipe\pipename”;该字符串开始是片只连续的反斜杠,其后的圆点表示是当地机械,如果要同长途的服务器建立连接,应以圆点位置处在指定这个远程服务器的名;接下是“pipe”这个原则性不可改变的字符串,大小写无所谓;最后是所创建的命名管道的称号;

      dwOpenMode:指定管道的访方式、重叠方式、写直通方式、管道句柄的安康访问方式;

        管道访问方式:

          PIPE_ACCESS_DUPLEX 
–双向模式,服务器进程和客户端进程都可于管道读取数据和向管道遭形容副数据;

          PIPE_ACCESS_INBOUND 
–服务器端只能由管道遭读取数据,客户端只能为管道写副数据;

          PIPE_ACCESS_OUTBOUND 
–服务器只能望管道被描绘副数据,客户端只能打管道遭读取数据;

        重叠方式及描写直通方式:

          FILE_FLAG_WRITE_THROUGH 
–允许写直通方式;该方法才影响对字节类型管道的写入操作,并且只有当客户端和服务器端位于不同的处理器及常才使得;如果使用该办法,只有当交要写副命名管道的多寡通过网络传送过去,并且在了远距离计算机的管道缓冲区中晚,写多少的函数才会中标返回;

          FILE_FLAG_OVERLAPPED 
–允许重叠方式;如果采用该法,那些需要肯定时间才会得的读写操作会立刻返回,前台线程可实施外操作,而耗时的操作可以于后台进行;

        管道句柄的安全访问方式:

          WRITE_DAC 
–调用者对命名管道的人身自由访问控制列表(ACL)都好进行摹写副访问;

          WRITE_OWNER 
–调用者对命名管道的所有者可以进行勾勒副访问;

          ACCESS_SYSTEM_SECURITY 
–调用者对命名管道的安康访问控制列表(SACL)可以进行勾勒副访问;

      dwPipeMode:指定管道句子柄的门类、读取、等待方式;同一个命名管道的诸一个实例必须持有相同之花色,但不同实例可以指定不同之读取方式和等候方式;字节模式只能用配节约流方式读取,而信息模式既可以用信息流方式读取也可据此配节约流方式读取;设为0时取默认值;

        管道句柄的项目:

          PIPE_TYPE_BYTE 
–数据为字节约流的形式写副管道,该项目不克于PIPE_READMODE_MESSAGE读方式下以;默认类型;

          PIPE_TYPE_MESSAGE  –数据为消息流的花样写副管道;

        管道句柄的读取方式:

          PIPE_READMODE_BYTE 
–以字节约流的方由管道读取数据;默认方式;

          PIPE_READMODE_MESSAGE 
–以消息流的计自管道读取数据,该办法只能当PIPE_TYPE_MESSAGE模式下行使;

        管道句柄的等待方式:

          PIPE_WAIT  –阻塞方式;默认方式;

          PIPE_NOWAIT –非死方式;

      nMaxInstances:指定管道会创立的极多实例数;取值范围也:1~PIPE_UNLIMITED_INSTANCES,如果是PIPE_UNLIMITED_INSTANCES则足以创造的管道实例数目只有受限于系统可采取的资源;

      nOutBufferSize:指定为出口缓冲区所保存的字节数;

      nInBufferSize:指定为输入缓冲区所保存的字节数;

      nDefaultTimeOut:指定默认的超时值,单位为ms;同一个管道的差实例必须指定同的超时值;

      lpSecurityAttributes:指向SECURITY_ATTRIBUTES结构的指针,可以设置为NULL;

2、让服务器端等待客户端的连续要

  BOOL ConnectNamedPipe(

      HANDLE hNamedPipe,       

      LPOVERLAPPED lpOverlapped  

  );

      hNamedPipe:指向一个命名管道实例的服务器端的句柄,该句柄即为CreateNamedPipe函数的返回值;

      lpOverlapped:指向OVERLAPPED结构体的指针;如果hNamedPipe参数所标识的管道是用FILE_FLAG_OVERLAPPED标记打开的,则是参数所对的OVERLAPPED结构体中得含有人工重置事件目标句柄;

3、客户端等可用之命名管道

  BOOL WaitNamedPipe(

      LPCTSTR lpNamedPipeName,

      DWORD nTimeOut           

  );

      lpNamedPipeName:指定命名管道的称呼,名称格式为:“\\.\pipe\pipename”,如果服务器端和客户端在同计算机达,名称开始的少独反斜杠后也圆点;如果是跨网络通信,则于圆点位置处应指定服务器端所在主机名;

      nTimeOut:指定超时间隔,包括:

        NMPWAIT_USE_DEFAULT_WAIT 
–超时间相隔就是是服务器端创建该命名管道经常指定的超时值;

        NMPWAIT_WAIT_FOREVER 
–一直待,直到出现一个可用之命名管道的实例

 

相关文章