首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

C++Builder NetBIOS 程式設計指南:基礎服務與會話通訊實作

     編輯:VC 教學

NetBIOS 簡介

NetBIOS (Network Basic Input/Output System) 是一個應用層程式介面 (API),提供跨網路的命名、資料報、會話等通訊服務。雖然屬於較早期技術,但在區域網路、舊系統維護、特定嵌入式環境中仍有應用。它位於 OSI 模型的會話層與表示層之間,支援 IEEE 802.2 LLC 協議,可運行於 DOS、OS/2、UNIX、Windows 等平台。

核心服務

1. 命名服務

  • 每個網路介面卡使用 16 字元網路名稱識別自己。
  • 指令:Add Name、Add Group Name、Delete Name。

2. 資料報服務

  • 無連接、不可靠、最大長度視實作而定。
  • 類型:廣播 (Send/Receive Broadcast Datagram) 與 定向 (Send/Receive Datagram)。
  • 適合簡單通知、發現服務。

3. 會話服務

  • 可靠、雙向、連線導向(虛擬電路)。
  • 建立流程:一方 Listen(被動),另一方 Call(主動),名稱匹配後建立會話。
  • 資料傳輸:Send / Receive。
  • 優於資料報:可知對方接收狀態、保證順序、流量控制。

4. 通用命令

  • Reset:重置介面卡,終止所有會話。
  • Adapter Status:查詢介面卡狀態、錯誤計數、名稱表。
  • Cancel:取消未完成掛起命令。
  • Unlink:RPL 啟動介面卡脫離服務器。
  • Find Name:查詢名稱對應的介面卡。
  • Trace:啟用命令追蹤供除錯。

NCB (Network Control Block) 結構

所有 NetBIOS 操作透過填寫 NCB 結構並呼叫 Netbios(&ncb) 完成。關鍵欄位:

typedef struct _NCB {
    UCHAR ncb_command;      // 命令碼
    UCHAR ncb_retcode;      // 返回碼
    UCHAR ncb_lsn;          // 區域會話號
    UCHAR ncb_num;          // 資源編號
    PUCHAR ncb_buffer;      // 資料緩衝區指標
    WORD ncb_length;        // 緩衝區長度
    UCHAR ncb_callname[16]; // 遠端名稱
    UCHAR ncb_name[16];     // 本地名稱
    UCHAR ncb_rto;          // 接收逾時
    UCHAR ncb_sto;          // 發送逾時
    // ... 事件、回呼等
} NCB;

會話建立範例流程

// 伺服器端
NCB ncb = {0};
ncb.ncb_command = NCBADDNAME;      // 註冊名稱
strcpy((char*)ncb.ncb_name, "MYSERVER");
Netbios(&ncb);

ncb.ncb_command = NCBLISTEN;       // 偵聽
strcpy((char*)ncb.ncb_name, "MYSERVER");
strcpy((char*)ncb.ncb_callname, "CLIENT*"); // 接受任何以 CLIENT 開頭
Netbios(&ncb);  // 返回 ncb_lsn 為會話 ID

// 用戶端
ncb.ncb_command = NCBADDNAME;
strcpy((char*)ncb.ncb_name, "CLIENT1");
Netbios(&ncb);

ncb.ncb_command = NCBCALL;
strcpy((char*)ncb.ncb_name, "CLIENT1");
strcpy((char*)ncb.ncb_callname, "MYSERVER");
Netbios(&ncb);  // 返回 ncb_lsn

// 雙方均可用 ncb_lsn 進行 Send/Receive
ncb.ncb_command = NCBSEND;
ncb.ncb_lsn = lsn;
ncb.ncb_buffer = (PUCHAR)"Hello";
ncb.ncb_length = 5;
Netbios(&ncb);

在 C++Builder 中使用

  • 引入 nb30.h、連結 netapi32.lib(或使用 Netbios 動態連結)。
  • 封裝 NCB 操作為 C++ 類別,管理資源、異常處理。
  • 注意:現代 Windows 版本可能預設停用 NetBIOS over TCP/IP,需在網卡設定啟用。

現代替代方案

新專案建議使用:

  • Winsock (TCP/UDP) —— 標準、跨平台、高效能。
  • Named Pipes / RPC —— 本機/區域網高效 IPC。
  • WCF / gRPC / REST —— 服務導向架構。

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