NetBIOS同時提供了
面向連接
服務以及
無連接
服務
面向連接的服務
是指它允許兩個客戶機相互間建立一個會話
或者說建立一個
虛擬回路
這種會話實際是一種雙向的通信數據流
通信的每一方都可向另一方發送消息
面向連接的服務可擔保在兩個端點之間
任何數據都能准確無誤的傳遞
在這種服務中
服務器通常將自己注冊到一個已知的名字下
客戶機會搜尋這個名字
以便建立與服務器的通信
就拿NetBIOS的情況來說
服務器進程會針對想通過它建立通信的每一個LANA編號
將自己的名字加入與其對應的名字表
而對於其他機器上的客戶來說
就可將一個服務名解析成機器名
然後要求同服務器進程建立連接
大家可以看到
為建立這種虛擬回路
必須采取一些適當的步驟
而且在初次建立連接的時候
還會牽涉到一些額外的開銷
面向連接
或
面向會話
的通信可保證通信具有極高的可靠性
而且數據包的收發順序也能保證正確無誤
然而
它仍然是一種
以消息為基礎
的服務
也就是說
假如已連接好的某個客戶機執行一個
讀
命令
那麼服務器在流中仍然只會返回一個數據包——盡管客戶機此時提供了一個足夠大的緩沖區
可同時容下幾個包!
無連接
或數據報服務中
服務器並不將自己注冊到一個特定的名下
而只是由客戶機收集數據
然後將其送入網絡
事前不必建好任何連接(即無連接)
對於數據的目的地址
客戶機會將其定義成服務器相應進程對應的NetBIOS名字
這種類型的服務不提供任何保障
但同面向連接的服務相比
卻可有更好的性能
如在使用數據報服務時
省下了建立連接所需的開銷
例如
客戶機可能向服務器興沖沖的一下子發出數千字節的數據
但那台服務器早在一兩天前便已當機了
除非依賴自服務器傳來的響應
否則客戶機永遠都收不到任何錯誤提示
現在我們已理解了NetBIOS的一些基本概念
接下來要討論的是NetBIOS的設置
只有一個函數
UCHAR Netbios(PNCB pNCB);
用於NetBIOS的所有函數聲明
常數等等均是在頭文件Nb
h內定義的
若想連接NetBIOS應用
唯一需要的是庫Netapi
lib
該函數最重要的特征便是pNCB這個參數
她對應於指向某個網絡控制塊(NCB)的一個指針
在那個NCB結構中
包含了為執行一個NetBIOS命令
相應的NetBIOS函數需要用到的全部信息
該結構的定義如下
typedef struct _NCB
{ UCHAR ncb_command;
UCHAR ncb_retcode;
UCHAR ncb_lsn;
UCHAR ncb_num;
PUCHAR ncb_buffer;
WORD ncb_length;
UCHAR ncb_callname[NCBNAMESZ];
UCHAR ncb_name[NCBNAMEZ];
UCHAR ncb_rto;
UCHAR ncb_sto;
void (*ncb_post)(struct _NCB *);
UCHAR ncb_lana_num;
UCHAR ncb_cmd_cplt;
UCHAR ncb_reserve[
];
HANDLE ncb_event;
}* PNCB
NCB
進行任何NetBIOS調用之前
不要一開始就填寫結構內成員
而應先將這個NCB結構清零
From:http://tw.wingwit.com/Article/Network/201311/29948.html