?第4章命名管道
?
?“命名管道”或“命名管線”(Named Pipes )是一種簡(jiǎn)單的進(jìn)程間通信( I P C)機(jī)制,?命名管道可在同一臺(tái)計(jì)算機(jī)的不同進(jìn)程之間,或在跨越一個(gè)網(wǎng)絡(luò)的
不同計(jì)算機(jī)的不同進(jìn)程之間,支持可靠的、單向或雙向的數(shù)據(jù)通信。
要記住的一個(gè)重點(diǎn)是,將命名管道作為一種網(wǎng)絡(luò)編程方案使用時(shí),它實(shí)際上建立一個(gè)簡(jiǎn)單的客戶機(jī)/服務(wù)器數(shù)據(jù)通信體系,可在其中可靠地傳輸數(shù)據(jù)。
4.1.1 命名管道命名規(guī)范命名管道的標(biāo)識(shí)是采用U N C格式進(jìn)行的:
\ \ s e r v e r \ P i p e \ [ p a t h ] n a m e
上述字串可分為三部分來(lái)觀看: \ \ s e r v e r、\ P i p e和\ [ p a t h ] n a m e。第一部分\ \ s e r v e r指定一個(gè)服務(wù)器的名字。命名管道便是在那個(gè)服務(wù)器上創(chuàng)建的,而且要由它對(duì)進(jìn)入的連接請(qǐng)求進(jìn)行“監(jiān)聽”。第二部分\ P i p e是一個(gè)不可變化的“硬編碼”字串(必須原樣照錄,但不用區(qū)分大小寫),用于指出該文件從屬于N P F S。而第三部分\ [ p a t h ] n a m e則使應(yīng)用程序可以“唯一”定義
及標(biāo)定一個(gè)命名管道的名字,而且可在這里設(shè)置多級(jí)目錄。
4.1.2 字節(jié)模式及消息模式
命名管道提供了兩種基本通信模式:字節(jié)模式和消息模式。
命名管道服務(wù)器應(yīng)用只能在Windows NT或Windows 2000上工作——Windows 95和Windows 98 不允許應(yīng)用程序創(chuàng)建命名管道!
4.2.2 高級(jí)服務(wù)器的細(xì)節(jié)
在前面的程序清單4 - 1中,我們展示了如何設(shè)計(jì)一個(gè)命名管道服務(wù)器應(yīng)用,令其只負(fù)責(zé)對(duì)一個(gè)管道實(shí)例的控制。所有A P I調(diào)用都采用同步模式工作。在這種模式下,每個(gè)調(diào)用都會(huì)一直等到I / O請(qǐng)求完成,才會(huì)返回。命名管道服務(wù)器也能擁有多個(gè)管道實(shí)例,所以客戶機(jī)能夠建立
同服務(wù)器的兩個(gè)或更多的連接;管道實(shí)例的數(shù)量要受到C r e a t e N a m e d P i p e這個(gè)A P I調(diào)用之n M a x I n s t a n c e s參數(shù)指定的數(shù)字的限制。要想同時(shí)控制不止一個(gè)的管道實(shí)例,服務(wù)器必須考慮使用多個(gè)線程,或者使用異步Win32 I/O機(jī)制(比如重疊式I / O以及完成端口等),分別為每個(gè)管道實(shí)例提供服務(wù)。
采用異步I / O機(jī)制,服務(wù)器可從單獨(dú)一個(gè)應(yīng)用程序線程中,同時(shí)為所有管
道實(shí)例提供服務(wù)。在此,我們將解釋如何使用線程以及重疊式I / O,來(lái)開發(fā)更高級(jí)的服務(wù)器應(yīng)用。
1 . 線程
要想開發(fā)一個(gè)高級(jí)服務(wù)器,令其使用線程,同時(shí)支持多個(gè)管道實(shí)例,整個(gè)過程是非常簡(jiǎn)單的。我們要做的唯一事情便是為每個(gè)管道實(shí)例都創(chuàng)建一個(gè)線程.
2. 重疊式I / O
重疊式I / O是一種特殊的輸入/輸出機(jī)制,允許Win32 API函數(shù)(如R e a d F i l e和Wr i t e F i l e)在發(fā)出I / O請(qǐng)求之后,以異步方式工作。具體的工作原理是:向這些A P I函數(shù)傳遞一個(gè)O V E R L A P P E D
(重疊式)結(jié)構(gòu),然后使用A P I函數(shù)G e t O v e r l a p p e d R e s u l t,從原來(lái)那個(gè)O V E R L A P P E D結(jié)構(gòu)中,取得一次I / O請(qǐng)求的結(jié)果。如果在使用重疊式結(jié)構(gòu)的前提下,調(diào)用一個(gè)Win32 API函數(shù),那么調(diào)用無(wú)論如何都會(huì)立即返回!
3. 安全模擬
之所以會(huì)選擇命名管道作為自己的網(wǎng)絡(luò)編程方案,一個(gè)最好的理由便是它們依賴于Windows NT及Windows 2000的安全機(jī)制,Windows NT和Windows 2000安全機(jī)制具有“模擬”能力,允許一個(gè)命名管道服務(wù)器
應(yīng)用在客戶機(jī)的安全環(huán)境中執(zhí)行。執(zhí)行一個(gè)命名管道服務(wù)器應(yīng)用時(shí),它通常會(huì)在用于啟動(dòng)該應(yīng)用的那個(gè)進(jìn)程的安全環(huán)境許可級(jí)別上工作。例如,假如擁有管理員權(quán)限的某人啟動(dòng)了一個(gè)命名管道服務(wù)器,服務(wù)器便有權(quán)訪問Windows NT或Windows 2000系統(tǒng)上的幾乎任何資源。此時(shí),假如在C r e a t e N a m e d P i p e中指定的S E C U R I T Y _ D E S C R I P TO R結(jié)構(gòu)允許所有用戶訪問這個(gè)
命名管道,就會(huì)埋下極大的安全隱患。
4.5 小結(jié)
本章向大家介紹了命名管道網(wǎng)絡(luò)編程技術(shù),它為我們建立了一個(gè)簡(jiǎn)單的客戶機(jī)/服務(wù)器數(shù)據(jù)通信體系,可確保數(shù)據(jù)進(jìn)行可靠傳輸。接口依賴于Wi n d o w s重定向器,以便通過一個(gè)網(wǎng)絡(luò)來(lái)傳送數(shù)據(jù)。對(duì)命令管道而言,它最大的一項(xiàng)好處便是直接利用了Windows NT及Wi n d o w s2 0 0 0的安全機(jī)制,該機(jī)制是本書講到的其他網(wǎng)絡(luò)技術(shù)均不具備的一項(xiàng)好處!下面第二部分將向大家深入講解Wi n s o c k技術(shù),以便應(yīng)用程序利用一種網(wǎng)絡(luò)傳輸協(xié)議,進(jìn)行“直接”通信。