Chinaunix首页 | 论坛 | 博客
  • 博客访问: 455674
  • 博文数量: 750
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4970
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 12:36
文章分类

全部博文(750)

文章存档

2011年(1)

2008年(749)

我的朋友
最近访客

分类:

2008-09-09 15:25:27


  NetBIOS同时提供了“面向连接”服务以及“无连接”服务。面向连接的服务,是指它允许两个客户机相互间建立一个会话,或者说建立一个“虚拟回路”。这种会话实际是一种双向的通信数据流,通信的每一方都可向另一方发送消息。面向连接的服务可担保在两个端点之间,任何数据都能准确无误的传递。在这种服务中,通常将自己注册到一个已知的名字下。客户机会搜寻这个名字,以便建立与的通信。就拿NetBIOS的情况来说,服务器进程会针对想通过它建立通信的每一个LANA编号,将自己的名字加入与其对应的名字表。而对于其他机器上的客户来说,就可将一个服务名解析成机器名,然后要求同服务器进程建立连接。大家可以看到,为建立这种虚拟回路,必须采取一些适当的步骤。而且在初次建立连接的时候,还会牵涉到一些额外的开销。“面向连接”或“面向会话”的通信可保证通信具有极高的可靠性,而且数据包的收发顺序也能保证正确无误。然而,它仍然是一种“以消息为基础”的服务。也就是说,假如已连接好的某个客户机执行一个“读”命令,那么服务器在流中仍然只会返回一个数据包——尽管客户机此时提供了一个足够大的缓冲区,可同时容下几个包!
    “无连接”或数据报服务中,服务器并不将自己注册到一个特定的名下,而只是由客户机收集数据,然后将其送入网络,事前不必建好任何连接(即无连接)。对于数据的目的地址,客户机会将其定义成服务器相应进程对应的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结构清零。
  
【责编:admin】

--------------------next---------------------

阅读(273) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~