您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > NetBios 编程参考手册
NetBios编程参考手册余明20010416NetBios编程参考手册(初稿)1.概述NetBios是PC机网络中用得最为广泛的网络协议之一,大多数的局域网(LAN)产品,如MicrosoftLANManager,NovellNetWare和BanqanVines都支持NetBios。因此,将NetBios作为网络协议的优点是:基于NetBios网络应用程序并不需修改便能在其它各种网络环境下运行,用户将享受到极大的灵活性,既使改用了其它网络也能继续使用原先的应用程序,避免了重复投入。1984年8月,Sytek公司推出了为IBM第一个局域网IBM-PCNetwork所使用的管理程序NetBIOS。1985年10月,IBM推出它的另一个局域网IBMToken-Ring时,使用了功能增强了的NetBIOS,称为NetBEUI。NetBIOS在国际标准化组织(ISO)开放系统互联(OSI)七层参考模型中处于较高的层次,如下图所示,所以编写NetBIOS接口应用程序基本上与其它层无关,这使得NetBIOS的应用在各种各样的通讯环境中基本上都可以移植。由于NetBIOS应用的广泛可移植性,且直观简单,以致NetBIOS在各种操作系统环境中迅速推广,如DOS、OS/2、UNIX等。当Microsoft推出其Windows系列时,一直把NetBIOS作为其主要的网络通信协议。以下对NetBIOS的使用作基本介绍。ISO/OSI参考模型2.NetBIOS的功能简介2.1概述NetBIOS提供了三种基本服务:名字服务、数据报服务、会话服务。应用程序通过调用三种服务中的相应控制命令,就能实现多机间,甚至单机内不同应用程序间的通讯。2.2名字服务为了保证通讯时信息能从信源机到达目的机,网上各工作站必须有相应的名字来证明自己的身份以及识别对方。工作站使用的名字可以有多个的,但在使用某个名字之前,必须在NetBios编程参考手册余明20010416局域中申请使用该名字的权利。申请的名字有两种:唯一名和组名。如果名字是唯一名,那么,局域网中其它工作站就不能使用这个名字,否则名字注册会失败;如果名字是组名,那么其它工作站就不能把这个名字注册为唯一名,并且局域网中任何工作站都可以同时注册这个组名。2.3数据报及会话服务各工作站中的应用程序可以通过NetBIOS与驻留在相同或不同工作站中的应用程序进行通讯。通信的方式有两种:数据报方式或会话方式。数据报是一种短信息,它既可被传送给具有唯一名的工作站,也可传送给共享一个组名的一组工作站;它的大小可由NetBIOS的执行程序改变但不保证信息准确有序地送到接收方,数据报信息的准确性需要程序员在程序中进行检验。DOS下数据报的最大长度是512字节,Windows下为1,024字节。会话是两个应用程序之间一种可靠的数据传送方式,属于点对点通信。与数据报相比,会话方式的主要优点是接收方系统要把信息接收状态送交到发送方系统,发送方系统根据信息接收状态确定信息是否重发,从而可以保证数据的准确性,整个过程由NetBIOS系统完成,不需要人工干涉。然而,会话的可靠性是以建立会话、维护会话、微机之间数据包应答的开销为代价,增加了网络负担。2.3NetBIOS非等待方式NetBIOS命令分为等待方式与非等待方式两种类型。等待方式是指该命令被接受时,程序被挂起,该命令完成后程序才继续执行。这种方式保证了数据安全完整地到达目的,同时也保证了通信软件本身执行的安全可靠,编程较为简单,在一些实时性要求不高的系统中使用起来即方便又可靠。非等待方式实际上是命令驻留内存方式,主程序执行不受到影响,等到NetBIOS认为“适当的时候”,执行所驻留的命令,完成相应的任务。NetBIOS设计者这样设计非等待方式,为了在处理通信任务时,保证主程序不必等待通信功能调用完成以后才执行其它的工作,而可直接继续工作下去。通信功能利用某个时间“间隙”完成,这样大大提高了通信的效率,从而满足了系统的实时性3.NetBios接口3.1概述NetBios层提供的是会话层服务,其实现称为NetBios驱动程序。但是,如果只有这些驱动程序或NetBios层本身,并不能实现通信。若想实现通信,NetBios层的客户机应当访问NetBios提供的服务具体访问可经由程序设计接口完成。NetBios提供了一系列标准的程序设计接口,应用程序可以利用这些接口在局域网间进NetBios编程参考手册余明20010416行通信。大多数局域网软件商(例如Microsoft,IBM和Novell)都提供具有这些接口的NetBios驱动程序。因为这些接口事实上已成了标准,所以,将基于NetBios的应用程序从一个局域网软件环境不加修改或稍加修改地移至另一个局域网软件环境中运行是可行的。再说一遍,支持这些接口是NetBios驱动程序的义务,由NetBios驱动程序负责将每一个NetBios接口调用转换成相应的一个或多个NetBios的协议包。下面按照它们所提供的服务分类介绍一下NetBios接口。说明一下,这里所说的实体是指,利用NetBios接口同其他实体(包括本身)进行通信的任何处理,或关联着NetBios名的任何处理。NetBios名是个16字节域,多余部分用空格(20H)填充或用NULL(00H)填充,但一定要统一。3.2命令服务NetBios为在网络上增加、删除、查找已命名NetBios实体提供了相应的接口。任何NetBios实体都可通过NetBiosAddName(增加名)接口使自己同一个NetBios名关联起来,该名在整个网络中具有唯一性。比如说,注册进入网络的每一个用户通常都有一个唯一的NetBios名,以便彼此之间能够区分开来。同时,一个实体可以登记成一个组名的一部分,多个实体可以将它们自己同这个组名相关联。例如,某一公司财务科的所有会计可以共享一个组名(或称别名),如“ACCOUNTS”,其后,发往该组名的消息将同时发往所有会计。当然,每一个会计还可有一个唯一的名(如注册ID或用户ID),以便发送和接收其个人消息。15个字符的计算机名是在网络中用于标识这台计算机的唯一名字,它是在计算机的“标识(Identity)”栏中由用户指定的。用户指定的计算机名最多占15个字符,当少于15个字符时便自动以空格或用NULL(00H)补足15个字符。用户指定的计算机名可以使用的字符有:数字0~9,不分大小写的英文字母,特殊字符“~、!、@、#、$、%、^、&、*、(、)、-、`、{、}、.”,在可见字符之间还可以有空格。名字实际上的区分大小写的,建议将名字全部转换成大写。其中的限制有:“*”不能用于名字开始,“*”保留用于广播地址,不能以“IBM”三个字母开头等。不过,如果希望NetBIOS计算机名在DNS(InternetDomainNameSystem)中也有效的话,NetBIOS计算机名中就不要使用非法的DNS字符:“.”、“@”、空格、下划线、不能以数字开始等,这可参见微软知识库Q1545543.3会话服务NetBios为创建、破坏或使用设置在任二个NetBios实体之间的会话提供了一系列接口。若想使用会话管理工具,NetBios实体首先应当通过AddName接口将自己同一个唯一名关联起来。在两个实体间设置了会话后,他们可以使用各自喜好的Send和Receive接口发送和接收数据缓冲区,缓冲区最大可达128KB-2字节=131070字节。大多数NetBios应用程序都利用这些服务来发送和接收数据包。NetBios编程参考手册余明200104163.4数据表(数据报)服务NetBios提供了一系列接口,来发送和接收称为数据表(datagram)的数据包。并不能保证数据表一定能成功地发送和接收,NetBios只是简单地尽其最大的能力发送和接收实体所提供的数据表。数据表最大可有64KB-1字节=65535字节长。可发送给一个实体,也可以广播方式了送给网络中所有实体。3.5杂务服务为获取安装在结点上的网络适配器卡的状态和动态复位适配器提供了相应的接口,它还为取消实体先前发出的命令提供了相应的接口。4.NetBios程序设计4.1概述前面根据OSI模型讨论了一般的网络规则以及NetBios提供的服务,还介绍了NetBios提供的网络应用程序可用来进行网络通信的大量接口(由NetBios驱动程序实现),这里,再介绍一下如何在Windows应用程序中使用这些接口。NetBios程序设计中最容易混淆的是,并不是每个NetBios接口都有一个API函数,取而代之的是,Windows只提供了一个函数(NETBIOSCALL),这个函数以一个数据结构作为输入,虽然数据结构中的字段是固定的,但程序设计人员可以通过一个特定字段称为命令字段的值,来表明想使用哪一个NetBios服务。DOS下的NetBios调用则是通过调用Int5Ch来实现,具体方法如下:1.Win32VC6Netbios(PNCB*ncb)//Usesnetapi32.lib2.DOSBC31DOS_NetBios(PNCB*ncb){unionREGSinregs,outregs;structSREGSsregs;sregs.es=FP_SEG((struct_NCBfar*)pncb);//把NCB的段地址赋予寄存器ESinregs.x.bx=FP_OFF((struct_NCBfar*)pncb);//把NCB的偏移量赋予寄存器BXint86x(0x5c,&inregs,&outregs,&sregs);//调用0x5c中断,请求NetBIOS调用returnpncb-ncb_retcode;}调用结果在函数返回值和ncb-ncb_retcode中返回。NetBios编程参考手册余明200104164.2调用命令的数据结构下面列出数据结构中的诸字段,说明每一个字段的含义,最后还要讨论一下NetBios命令的异步和同步执行。typedefstruct_NCB{unsignedcharncb_command;//1byte,commandcodeunsignedcharncb_retcode;//1byte,returncodeunsignedcharncb_lsn;//1byte,localsessionnumberunsignedcharncb_num;//1byte,numberofournetworknameunsignedchar*ncb_buffer;//4byte,addressofmessagebufferunsignedshortncb_length;//2byte,sizeofmessagebufferunsignedcharncb_callname[16];//16byte,blank-paddednameofremoteunsignedcharncb_name[16];//16byte,ourblank-paddednetnameunsignedcharncb_rto;//1byte,rcvtimeout/retrycountunsignedcharncb_sto;//1byte,sendtimeout/systimeoutvoid(*ncb_post)(structNCB*);//4byte,POSTroutlineaddressunsignedcharncb_lana_num;//1byte,lana(adapter)numberunsignedcharncb_cmd_cplt;//1byte,0xff=commandpendingunsignedcharncb_reserve[14];//10byte,reserved,usedbyBIOS//HANDLEncb_event;//4byte,HANDLEtoWin32event,whichwillbesettothesignalledstate,whenanASYNCHcommand}NCB,*PNCB;这个结构共64个字节,使用前一般
本文标题:NetBios 编程参考手册
链接地址:https://www.777doc.com/doc-5193580 .html