
“无连接”或数据报服务中,服务器并不将自己注册到一个特定的名下,而只是由客户机收集数据,然后将其送入网络,事前不必建好任何连接(即无连接)。对于数据的目的地址,客户机会将其定义成服务器相应进程对应的NetBIOS名字。这种类型的服务不提供任何保障,但同面向连接的服务相比,却可有更好的性能,如在使用数据报服务时,省下了建立连接所需的开销。例如,客户机可能向服务器兴冲冲的一下子发出数千字节的数据,但那台服务器早在一两天前便已当机了。除非依赖自服务器传来的响应,否则客户机永远都收不到任何错误提示。
现在我们已理解了NetBIOS的一些基本概念,接下来要讨论的是NetBIOS的设置,只有一个函数:
UCHAR Netbios(PNCB pNCB);
用于NetBIOS的所有函数声明、常数等等均是在头文件Nb30.h内定义的。若想连接NetBIOS应用,唯一需要的是库Netapi32.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[10]; HANDLE ncb_event; }* PNCB.NCB |
进行任何NetBIOS调用之前,不要一开始就填写结构内成员,而应先将这个NCB结构清零。