首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

NetBIOS 程式設計基礎:連接導向與無連接服務、NCB 結構詳解

     編輯:關於.NET

NetBIOS 兩大服務模式

連接導向服務 (Session Service / Virtual Circuit)

  • 建立雙向可靠資料流,「虛擬電路」
  • 保證**資料準確送達、順序正確、無重複**
  • 伺服器註冊已知名稱,客戶端解析名稱建立連接
  • 每個 LANA 編號維護獨立名稱表
  • **開銷較大**:建立連接需多次交握,**以訊息為單位**傳輸(單次 Read 只回一個封包,緩衝區再大也無用)

無連接服務 (Datagram Service)

  • 無需建立連接,客戶端直接發送資料報
  • 目標地址為伺服器進程的 NetBIOS 名稱
  • **無可靠性保證**:不保證送達、不保證順序、不保證不重複
  • **效能較高**:省去連接建立開銷
  • 風險:伺服器宕機客戶端無感知(除非依賴應用層回應)

唯一 API:UCHAR Netbios(PNCB pNCB)

  • 所有操作透過單一入口,功能由 NCB 結構體 ncb_command 欄位決定
  • 頭文件:Nb30.h;連結庫:Netapi32.lib

NCB (Network Control Block) 結構體完整定義

typedef struct _NCB {
    UCHAR ncb_command;        // 命令碼
    UCHAR ncb_retcode;        // 返回碼
    UCHAR ncb_lsn;            // 本地會話號
    UCHAR ncb_num;            // 命令編號/適配器編號
    PUCHAR ncb_buffer;        // 資料緩衝區指標
    WORD ncb_length;          // 緩衝區長度
    UCHAR ncb_callname[NCBNAMSZ]; // 呼叫端名稱 (16 bytes)
    UCHAR ncb_name[NCBNAMSZ];     // 本地名稱 (16 bytes)
    UCHAR ncb_rto;            // 接收逾時
    UCHAR ncb_sto;            // 發送逾時
    void (*ncb_post)(struct _NCB *); // 非同步完成回調
    UCHAR ncb_lana_num;       // LANA 編號
    UCHAR ncb_cmd_cplt;       // 命令完成碼
    UCHAR ncb_reserve[10];    // 保留
    HANDLE ncb_event;         // 事件物件 (非同步用)
} NCB, *PNCB;

黃金法則:使用前必須 清零 NCB

NCB ncb = {0}; // 或 memset(&ncb, 0, sizeof(NCB));
// 再填寫必要欄位...
ncb.ncb_command = NCBCALL; // 範例:發起連接
ncb.ncb_lana_num = 0;
strcpy((char*)ncb.ncb_callname, "SERVER_NAME  ");
strcpy((char*)ncb.ncb_name, "MY_CLIENT    ");
Netbios(&ncb);

未清零會導致保留欄位殘留垃圾值,引發不可預期的錯誤碼。

常用命令碼速查

命令值用途
NCBADDNAME0x00註冊本地名稱
NCBDELNAME0x01刪除本地名稱
NCBCALL0x10發起會話連接
NCBLISTEN0x11監聽連接請求
NCBSEND0x14會話發送資料
NCBRECV0x15會話接收資料
NCBHANGUP0x12掛斷會話
NCBSENDDG0x20發送資料報
NCBRECVDG0x21接收資料報
NCBASTAT0x33適配器狀態查詢
NCBSSTAT0x34會話狀態查詢

同步 vs 非同步調用

  • 同步:ncb_post = NULL,Netbios() 阻塞至完成
  • 非同步:設定 ncb_post 回調函數指標,Netbios() 立即返回,完成時呼叫回調;或設定 ncb_event 事件等待

名稱格式規範

  • 固定 16 位元組,不足右填空格 (0x20)
  • 第 16 位元組常用於區分服務類型(如 0x00 工作站、0x20 伺服器、0x1B 域控制器)
  • 群組名稱支援廣播語意

結語

NetBIOS 雖屬經典技術,但在舊系統維護、嵌入式裝置、特定工控網絡中仍有應用。掌握 NCB 結構、雙模式特性與同步/非同步模式,是進行 NetBIOS 程式設計的基石。現代開發建議優先考慮 TCP/IP Socket、Named Pipe 或 WCF 等更通用、跨平台的通訊方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved