標籤:blog http 使用 os io 檔案 資料 2014
對之前網路基礎編程用到控制塊NCB進行介紹(補充):
在Win32環境下,使用VC++6.0進行NetBIOS程式開發時, 需要用到nb30.h檔案和netapi32.lib靜態連結庫。前者定義了NetBIOS的所有函式宣告和常數定義,後者定義了NetBIOS應用。
Ncb的結構在nb30.h檔案中定義。Ncb結構的定義:Ncb有64個字元,分為14個域(或稱為欄位)和一個10位元組的保留網域,表2.1顯示了Ncb和它的域。
網域名稱及位元組位移量說明。
各個命令詳細說明:
1. 命令 NetBIOS命令的使用方式有兩種,即等待和非等待(或稱為同步與非同步)方式。如果命令碼的高階位是0時是等待方式,命令將阻止提交命令的應用程式繼續執行,直到該NetBIOS命令執行完畢後才允許這個應用程式繼續執行。NetBIOS每次只能處理一個等待方式命令。 如果命令碼的高階位是二進位1時則是非等待方式,命令由NetBIOS在內部排隊,並不阻止提交命令的應用程式繼續執行。應用程式可通過對命令結束標誌欄位值的輪詢來瞭解命令執行的狀態(詳見命令結束欄位介紹)。命令執行完畢後,最終的返回碼存放在Ncb結構的命令結束標誌欄位中。NetBIOS每次可以掛起幾個非等待方式命令。
2. 返回碼 命令提交給NetBIOS驅動程式後,該命令的成功與否即在該欄位中反映出來。若返回碼欄位值為00h,則表示命令成功。對於非同步NetBIOS命令NetBIOS將立即在返回碼欄位中傳回值FFh,表明該命令已經排隊,即將執行。命令執行完畢後,該欄位將置成最終的返回碼。
3. 本地會話編號 同遠程應用程式處理建立了會話後,NetBIOS驅動程式將相應設定該欄位(局部會話號)。在隨後的通訊中,若想同遠端進行通訊,本地處理只需在Ncb結構中指明局部會話號,不再需要在本地會話編號欄位中指定完整的遠端邏輯名。 單就一個適配器而言,工作站上和每一個處理一次至多能進行254個會話,只要指定相關的局部會話號,就能達到會話的目的。系統保留值0和255,不將它們作為局部會話號使用。
4. 名字編號 工作站上的每一個處理最多可向名表中加進254個邏輯名。成功地將一邏輯名加進LANA的私人名表後,NetBIOS將置名字編號欄位值為該名在名表中的索引值(索引值稱為名號),在以後的同遠端進行的非串連式通訊中可使用這個名號。名號0和255亦為系統保留,其中適配器的物理地址總在名表第1項中。
5. 緩衝區地址 該欄位的值是要發送的資料緩衝區的地址,或者要在其中存放接收到的資料的緩衝區的地址。
6. 緩衝區長度 該欄位指定的是由緩衝區地址欄位指定的緩衝區的長度。?接收到一塊資料時,NetBIOS將相應設定該欄位。
7. 調用(遠程)名 調用(遠程)名是一個由應用程式設定的16位元組域,其值是遠端的邏輯名。應用程式設定一個串連或向遠端發送一個資料表包時,將相應設定該欄位。在遠程驅動程式串連正期待著接收串連呼叫的本地處理時,NetBIOS將填寫該欄位。因此,接收呼叫的處理能夠找出遠程來電者的名。第一個位元組為“*”代表任意遠程名。
8. 本地名 本地名是由應用程式設定的16位元組欄位(所有的位元組均有用),其值是本地處理的邏輯名。應用程式設定一個串連或向遠端發送一個資料表包時,將相應設定該欄位。該欄位的第一個位元組不能是二進位0或星號;另外,IBM保留了頭三個位元組,所以頭三個位元組不能是IBM。最後,第16個位元組不能是00h~1Fh之間的值。在區域網路管理器環境下,最後一個字元(即第16個位元組)有特殊的含義,具體如下表:
9. 接收逾時 當期望從一個或數個遠端接收到一個資料包時,應用程式可在接收逾時(接收時間限制)欄位中指定等待的最大時間數值(以1/2 s為間隔單位)。若超過了指定時間仍未接收到包,則NetBIOS驅動程式將在接收逾時欄位中返回錯誤。若接收逾時欄位值為00h,則表示阻止執行,直到本地處理接收到一個資料包。
10. 發送逾時 發送逾時(發送時間限制)欄位類似於接收逾時欄位,但它指定的是等待NetBIOS串連式命令Send完成的時間。若超過了指定時間,則將返回錯誤。若發送逾時欄位值為00h,則表示不為發送操作指定時間限制。此時,命令將阻止執行,直到要麼成功地發送了一個資料包,要麼NetBIOS層停止了重試。
11. POST常式地址 在提交非同步命令時,應用程式可以設定該欄位。在MS-DOS中,應用程式將後處理常式的地址填在該欄位中。所謂後處理常式,即命令執行完畢後NetBIOS驅動程式將要調用的常式。
12. LANA編號 一台工作站上可能有不止一個LANA卡或網路通訊協定(或傳輸驅動程式),所以Ncb中的LANA編號欄位是用來指明應用程式想使用哪一個網路介面卡上的哪個網路通訊協定的。該欄位稱為LAN適配器號或LANA號,LANA編號在0~9之間。
注意:只有基於相同NetBIOS協議的程式才能相互連信。 基於此,在設計程式時,伺服器應用程式應對每個LANA編號上的客戶機串連進行監聽;客戶機上的應用程式需要通過本機安裝的每個LANA編號嘗試進行串連。
13. 命令結束標誌 NetBIOS驅動程式利用該欄位來表明非同步命令已完成。起先,當應用程式提交一條非同步命令時,NetBIOS將置該欄位值為FFh。待命令執行完畢後,再將最終值填入該欄位。也就是說,提交了一條非等待命令後,應用程式可以監視(輪詢)該欄位的取值以瞭解命令是否完畢,直到其值不再是FFh為止。
14. 保留網域 Ncb的保留網域為10位元組長的保留網域,NetBIOS可能用它來返回擴充的錯誤資訊。另外,NetBIOS在處理請求的過程中,用它來作暫存區。應用程式不應使用Ncb的保留網域,因為一旦它遭到破毀,NetBIOS的行為將是不可預測的。
15. 事件控制代碼 在提交非同步命令時,應用程式可以設定該欄位。該域用於存放後處理常式的控制代碼。 注意:當命令域的設定使用ASYNCH(非同步)標誌時,該域的設定與POST常式地址域的設定互斥,即其中必須有一個域的設定為0,而另一個為非0值。