中文名 | 管道通信 | 外文名 | Communication Pipeline |
---|
命名管道程序设计的实现
1.命名管道Server和Client间通信的实现流程
(1)建立连接:服务端通过函数CreateNamedPipe创建一个命名管道的实例并返回用于今后操作的句柄,或为已存在的管道创建新的实例。如果在已定义超时值变为零以前,有一个实例管道可以使用,则创建成功并返回管道句柄,并用以侦听来自客户端的连接请求,该功能通过ConnectNamedPipe函数实现。
另一方面,客户端通过函数WaitNamedPipe使服务进程等待来自客户的实例连接,如果在超时值变为零以前,有一个管道可以为连接使用,则WaitNamedPipe将返回True,并通过调用CreateFile或CallNamedPipe来呼叫对服务端的连接。此时服务端将接受客户端的连接请求,成功建立连接,服务端ConnectNamedPipe返回True,客户端CreateFile将返回一指向管道文件的句柄。
从时序上讲,首先是客户端通过WaitNamedPipe使服务端的CreateFile在限时时间内创建实例成功,然后双方通过ConnectNamedPipe和CreateFile成功连接,并返回用以通信的文件句柄,此时双方即可进行通信。
(2)通信实现:建立连接之后,客户端与服务器端即可通过ReadFile和WriteFile,利用得到的管道文件句柄,彼此间进行信息交换。
(3)连接终止:当客户端与服务端的通信结束,或由于某种原因一方需要断开时,客户端应调用CloseFile,而服务端应接着调用DisconnectNamedPipe。当然服务端亦可通过单方面调用DisconnectNamedPipe终止连接。最后应调用函数CloseHandle来关闭该管道。
命名管道服务器端和客户端代码实现
客户端
HANDLE CltHandle;
char pipenamestr[30];
sprintf(pipenamestr,″\\servername\pipe\pipename″)
if (WaitNamedPipe( pipenamestr, NMPWAIT—WAIT—FOREVER)==FALSE
// 管道名要遵循UNC,格式为\ \.\pipe\pipname,名字不分大小写。
AfxMessageBox(″操作失败,请确定服务端正确建立管道实例!″);
Else
CltHandle=CreateFile(pipenamestr, GENERIC—READ|GENERIC—WRITE, FILE—SHARE—READ| FILE—SHARE—WRITE,NULL, OPEN—EXISTING,
//为了与命名管道连接,此参数应一直为OPEN—EXISTING
FILE—ATTRIBUTE—ARCHIVE|FILE—FLAG—WRITE—THROUGH,
// FILE—FLAG—WRITE—THROUGH会使管道WriteFile调用处于阻塞状态,直到数据传送成功。
NULL);
If (CltHandle== INVALID—HANDLE—VALUE)
AfxMessageBox(″管道连接失败″);
Else
DoUsertTransactInfo();
//执行用户自定义信息交换函数——从管道读、写信息。
……
服务端
HANDLE SvrHandle;
char pipenamestr[30];
sprintf(pipenamestr,″\\.\pipe\pipename″)
SvrHandle=CreateNamedPipe(pipenamestr,
PIPE—ACCESS—DUPLEX|FILE—FLAG—WRITE—THROUGH,
//阻塞模式,这种模式仅对″字节传输管道″操作有效。
FILE—WAIT|PIPE—TYPE—BYTE,
//字节模式
PIPE—UNLIMITED—INSTANCES,
128,128,
NULL,NULL);
// SECURITY—ATTRIBUTES结构指针,描述一个新管道,确定子进程的继承权,如果为NULL则该命名管道不能被继承。
If (SvrHandle==INVALID—HANDLE—VALUE)
AfxMessageBox(″管道创建失败,请确定客户端提供连接可能!″);
Else
If (ConnectNamedPipe(SvrHandle,NULL)==FALSE)
AfxMessageBox(″建立连接失败!″);
Else
DoUsertTransactInfo();
//用户自定义信息交换函数
……
关于Unix中的管道通信
从Unix System V 开始,系统提供有名管道和无名管道两种数据通信方式。
无名管道为建立管道的进程和子进程提供一种以比特流方式传送信息的通信管道。在逻辑上可以看作是管道文件,在物理上由文件系统的高速缓冲区构成,而很少起用外设。发送进程利用文件系统的系统调用write (fd[1],buf,size)把buf中长度为size的字符送入管道入口fd[1],接受进程则使用系统调用read(fd[0],buf,size)从管道出口读取信息到buf。管道按照先进先出传送消息。只能单向传送。
建立无名管道的系统调用为int fd[2],pipe(fd)。-------参考教材计算机操作系统教程(第三版)清华大学出版社
使用灵活性
命名管道具有很好的使用灵活性,表现在:
1) 既可用于本地,又可用于网络。
2) 可以通过它的名称而被引用。
3) 支持多客户机连接。
4) 支持双向通信。
5) 支持异步重叠I/O操作。
不过,当前只有Windows NT支持服务端的命名管道技术。
程序设计的注意事项
1.如果命名管道客户端已打开,函数将会强迫关闭管道,用DisconnectNamedPipe关闭的管道,其客户端还必须用CloseHandle来关闭最后的管道。
2. ReadFile和WriteFile的hFile句柄是由CreateFile及ConnectNamedPipe返回得到。
3.一个已被某客户端连接的管道句柄在被另一客户通过ConnectNamedPipe建立连接之前,服务端必须用DisconnectNamedPipe函数对已存在的连接进行强行拆离。服务端拆离管道会造成管道中数据的丢失,用FlushFileBuffers函数可以保证数据不被丢失。
4.命名管道服务端可以通过新创建的管道句柄或已被连接过其他客户的管道句柄来使用ConnectNamedPipe函数,但在连接新的客户端之前,服务端必须用函数DisconnectNamedPipe切断之前的客户句柄,否则ConnectNamedPipe 将会返回False。
5.阻塞模式,这种模式仅对“字节传输管道"操作有效,并且要求客户端与服务端不在同一机器上。如果用这种模式,则只有当函数通过网络向远端计算机管道缓冲器写数据成功时,才能有效返回。如果不用这种模式,系统会运行缺省方式以提高网络的工作效率。
6.用户必须用FILE—CREATE—PIPE—INSTANCE 来访问命名管道对象。新的命名管道建立后,来自安全参数的访问控制列表定义了访问该命名管道的权限。所有命名管道实例必须使用统一的管道传输方式、管道模式等参数。客户端未启动,管道服务端不能执行阻塞读操作,否则会发生空等的阻塞状态。当最后的命名管道实例的最后一个句柄被关闭时,就应该删除该命名管道。
Linux 的管道通信 进程通信的实用例子之一是 Unix 系统的管道通信。 Unix 系统从 SystemV 开始提供有名 管道和无名管道两种数据通信方式。 无名管道为建立管道的进程及其子孙提供一条以比特流 方式传送消息的通信 。该管道在逻辑上被看作管道文件,在物理上则由文件系统的高速缓 冲区构成,而很少启动外设。有名管道可用于两个无关的进程之间的通信。 管道是 Linux 支持的最初 Unix IPC 形式之一,在 Linux 中是一种使用非常频繁的通信 机制。从本质上说, 管道也是一种文件, 但它又和一般的文件有所不同,管道可以克服使用 文件进行通信的两个问题,具体表现为: ·限制管道的大小。实际上,管道是一个固定大小的缓冲区。在 Linux 中,该缓冲区的 大小为 1 页,即 4K 字节,使得它的大小不象文件那样不加检验地增长。使用单个固定缓冲 区也会带来问题, 比如在写管道时可能
本书重点阐述了长输油气管道通信传输网的相关知识,主要内容包括通信基础、油气管道光缆网、油气管道光通信传输设备、时钟同步网、油气管道卫星通信网、光传输网管、传输网运行维护以及油气管道通信传输网发展趋势等。
本书主要用作长输油气管道通信运行维护人员的培训教材,也可供长输油气管道通信设计、施工、维护管理人员学习参考。
第一章 绪论
第一节 通信系统基本概念及分类
第二节 通信网
第三节 油气管道通信传输网
复习思考题
第二章 油气管道光缆网
第一节 光纤
第二节 光缆
第三节 油气管道光缆的同沟敷设
复习思考题
第三章 油气管道光通信传输设备及组网
第一节 光通信传输技术演进
第二节 光传输网主要技术
第三节 光传输技术在油气管道传输网的应用
复习思考题
第四章 时钟同步网
第一节 同步网
第二节 SDH传输网同步
第三节 管道SDH光传输时钟同步网
复习思考题
第五章 油气管道卫星通信网
第一节 卫星通信技术演进
第二节 卫星通信基础知识
第三节 卫星通信系统构成
第四节 卫星通信系统的技术体制
第五节 VSAT卫星通信技术
第六节 卫星通信技术在油气管道通信网的应用
复习思考题
第六章 光传输网管
第一节 光传输网管基础知识
第二节 油气管道SDH光传输网网管系统
第三节 综合网管
复习思考题
第七章 传输网运行维护
第一节 光缆维护
第二节 通信系统维护
第三节 传输网运行维护所需仪器仪表
第四节 运行维护工作的信息化
复习思考题
第八章 油气管道通信传输网发展趋势
复习思考题
附录 专用词汇及缩略语
参考文献 2100433B
丛书名中国石油天然气集团公司统编培训教材
版次1
印张26
条码号9787518315062
装帧平装
出版社石油工业出版社
印刷时间2016.12
所属分类TE978
页数414
字数430千字
开本1/16
CIP 数据CIP数据核字(2016)第236362号