程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> delphi技術專題---獲取網卡物理地址之TLanaENum結構步驟學習分享

delphi技術專題---獲取網卡物理地址之TLanaENum結構步驟學習分享

編輯:Delphi

除了TNCB結構之外TLanaENum結構是另外一個比較重要的結構如下所示:(同樣位於NB30.pas) [delphi]   type     // Structure returned to the NCB command NCBENUM.     // On a system containing lana's 0, 2 and 3, a structure with     // length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.     PLanaEnum = ^TLanaEnum;     TLanaEnum = packed record       length: Char;         //  Number of valid entries in lana[]       lana: array[0..MAX_LANA] of Char;     end;          其中,length成員指出本地機器共有多少個LANA編號;LANA成員代表由實際的LANA編號構成的一個數組。而length值指出LANA數組內有多少個元素會被填充LANA編號。     另外,需要說明的是,調用Netbios函數時,可以采用兩種不同的方式,即同步方式和異步方式。在默認情況下,所有Netbios命令本身均是同步的。換言之,完成命令以前,會一直調用Netbios塊。而對一個NCBLISTEN命令來說,當有一個客戶機建立了連接,或發生某種類型的錯誤時,對Netbios的調用才會返回。要想異步調用一個命令,需要讓Netbios命令同ASYNCH標志進行一次邏輯OR(或)運算。如指定了ASYNCH標志,那麼必須在ncb_post字段中指定一個回調例程( Past Routine),或必須在ncb_event字段中指定一個事件句柄。執行一個異步命令時,從Netbios返回的值是NRC_ GOODRET(OxOO),但NCB_CMD_CPLT字段會設為NRC_PENDING(OxFF)。除此以外,Netbios函數還會將NCB結構的ncb_cmd_cplt一吶字段設為NRC_PENDING,直到命令完成為止。命令完成之後,ncb_retcode字段設為命令的返回值。    在編寫Netbios應用程序時,經常需要進行如下幾項操作: .枚舉系統上可用的所有LANA編號。 .重置計劃使用的每個LANA編號。 .將名字加入本地名字表。 .將組名加入本地名字表。 .從名字表中刪除除一個已經注冊的Netbios名字。 .向網絡發送數據。 .從網絡接收數據。 .獲取網絡參數。     Netbios API雖然只有一個函數,但是它可以實現前面列出的所有操作,這是通過設定 TNCB結構的ncb_command字段來實現的。     要枚舉一個指定系統上可用的所有LANA編號。具體步驟如下:   (1)申請分配一個TNCB結構。 (2)將該TNCB結構變量初始化成O。 (3)將該TNCB結構變量的ncb_command字段設為NCBENUM。 (4)為ncb_buffer字段分配一個LANA_ENUM結構。 (5)將ncb_lengrh字段設為LANA_ENUM結構的長度。 (6)以該TNCB結構變童為參數調用Netbios函數。 (7)返回常數NRC一GOODRET,表示操作成功。       對一個設計良好的Netbios程序來說,必須重置計劃使用的每個LANA編號,否則,對Netbios的其他調用就會返回錯誤代碼52(即NRC_ ENVNOTDEF)。一旦擁有一個LANA_ENUM結構,並有來自LanaEnum的LANA編號,便可針對結構中的每個LANA編號,調用NCBRESET命令來重置它們。具體步驟如下:   (1)申請分配一個TNCB結構。 (2)將該TNCB結構變量初始化成0 (3)將該TNCB給構變量的ncb_command字段設為NCBRESET。 (4)將ncb_lana_num字段設為需要重置的LANA編號。 (5)將nb_callname字符字段設為需要要使用的特定Netbios偽壞境參數。 (6)以該TNCB結構變量為參數調用Netbios函數。 (7)返回常數NRC_GOODRET,表示操作成功。     對於前面所說的ncb_callname字段說明以下幾點需要補充: .ncb_callname字段的字符0用於指定可同時進行的最大會話數。通常,操作系統會強制使用一個此最大值的默認值。例如,Windows NT 4.0的最大獄認值為64個並發會話。 .ncb_callname字段的字符2用於指定可為每個LANA增加的最大Netbios名字數量。     同樣,操作系統也會強加一個默認的最大值。 .ncb_callname字段的字符3(用於Netbios客戶機)是一個布爾類型的備。通過將此參數設為TRUE,一個客戶機便能將機器名作為自己的Netbios進程名使用。因此,那個客戶機可與一個服務器建立連接,並在不允許任何其他連接的前提下,向其發送數據。這一選項有效縮短了初始化時間。而假如將一個Netbios名字加入本地名字表,那麼必須為此付出相應的代價。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved