NetBIOS同时提供了面向连接服务以及无连接服务面向连接的服务是指它允许两个客户机相互间建立一个会话或者说建立一个虚拟回路这种会话实际是一种双向的通信数据流通信的每一方都可向另一方发送消息面向连接的服务可担保在两个端点之间任何数据都能准确无误的传递在这种服务中服务器通常将自己注册到一个已知的名字下客户机会搜寻这个名字以便建立与服务器的通信就拿NetBIOS的情况来说服务器进程会针对想通过它建立通信的每一个LANA编号将自己的名字加入与其对应的名字表而对于其他机器上的客户来说就可将一个服务名解析成机器名然后要求同服务器进程建立连接大家可以看到为建立这种虚拟回路必须采取一些适当的步骤而且在初次建立连接的时候还会牵涉到一些额外的开销面向连接或面向会话的通信可保证通信具有极高的可靠性而且数据包的收发顺序也能保证正确无误然而它仍然是一种以消息为基础的服务也就是说假如已连接好的某个客户机执行一个读命令那么服务器在流中仍然只会返回一个数据包——尽管客户机此时提供了一个足够大的缓沖区可同时容下几个包! 无连接或数据报服务中服务器并不将自己注册到一个特定的名下而只是由客户机收集数据然后将其送入网络事前不必建好任何连接(即无连接)对于数据的目的地址客户机会将其定义成服务器相应进程对应的NetBIOS名字这种类型的服务不提供任何保障但同面向连接的服务相比却可有更好的性能如在使用数据报服务时省下了建立连接所需的开销例如客户机可能向服务器兴沖沖的一下子发出数千字节的数据但那台服务器早在一两天前便已当机了除非依赖自服务器传来的响应否则客户机永远都收不到任何错误提示现在我们已理解了NetBIOS的一些基本概念接下来要讨论的是NetBIOS的设置只有一个函数UCHAR Netbios(PNCB pNCB);用于NetBIOS的所有函数声明常数等等均是在头文件Nbh内定义的若想连接NetBIOS应用唯一需要的是库Netapilib该函数最重要的特征便是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;}* PNCBNCB 进行任何NetBIOS调用之前不要一开始就填写结构内成员而应先将这个NCB结构清零
|