




已阅读5页,还剩87页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络编程与开发技术 信息学院 第二章基于NetBIOS的网络编程 内容提要 1 NetBIOS基本概念2 NetBIOS命令功能3 网络编程设计要素4 NetBIOS基本程序5 数据报通信程序设计6 会话通信程序设计 2 1NetBIOS基本概念 第二章基于NetBios的网络编程 NetBIOS概述LANA编号NetBIOS名字服务NetBIOS命令网络控制块 NCB 2 1 1NetBIOS概述 第二章基于NetBios的网络编程 NetBIOS是网络基本输入 输出系统的缩写 为网络通信程序提供了一种会话层的编程接口 与TCP IP和IPX SPX等协议比 具有极高的通信效率 MicrosoftTCP IP和NetBEUI在默认情况下已提供了一个NetBIOS接口 对IPX SPX来说 在Windows9X中 有一个特殊的复选框 名为 希望在IPX SPX上启用NetBIOS 在Windows2000提供的协议本身就叫作 NWLinkIPX SPX NetBIOS兼容传送协议 NetBEUI并非是一种 可路由 协议 假定在客户机和服务器之间存在一个路由器 那么这种协议在两部机器上的应用便无法沟通 2 1 2LANA编号 第二章基于NetBios的网络编程 LANA LANadapter 编号 每个LANA编号对应于网卡及传输协议的唯一组合 用于指定使用哪块网卡进行网络通信 例如 假定某工作站安装了两张网卡 以及两种具有NetBIOS能力的传输协议 如TCP IP和NetBEUI 那么总共就有四个LANA编号 下面是一种对应关系的例子 LANA0NetBEUI 网卡1LANA1TCP IP 网卡1LANA2NetBEUI 网卡2LANA3TCP IP 网卡2通常 LANA编号的范围在0到9之间 除LANA0之外 系统并不按某种固定的顺序来分配这些编号 LANA0代表的是 默认 LANA 2 1 3NetBIOS名字 第二章基于NetBios的网络编程 NetBIOS名字 NetBIOS是一种按名字工作的系统 在进行通信时 信息的源地址和目的地址都是用名字来表示的 每一个网络计算机都有一个或几个名字 由NetBIOS保留一张名字表 每个名字都为16字节长 NetBIOS名字类型 唯一名 它是独一无二的 网络上不能再有其他任何进程来注册这个名字 如果一台机器已注册了某名字 那么在你注册该名字时 便会收到一条 重复名字 出错提示 组名 多个节点可拥有同一组名 它主要用于多播 多点发送 数据通信 2 1 3NetBIOS名字 第二章基于NetBios的网络编程 命名规则 在为一个节点指定名字时 注意不要用 号或二进制0开头 也不要用 IBM 这3个字母开头 因为这些名字都是系统保留的 每个名字都为16字节长 为了保证名字表中的唯一名字都是互不相同的 在往名字表中加入新的唯一名字时 NetBIOS首先在本地名字表中检查 如无重名 则在整个网络内发出一条特殊的广播询问消息 如果在规定的时间内没有其他节点回应这条消息 便允许发送者使用该名字 同时给出对应的名字号 对每个LANA来说 能够添加的名字的最大数量是254 名字号从1到254 0和255由系统保留 2 1 4NetBIOS命令 第二章基于NetBios的网络编程 NetBIOS命令 NetBIOS的所有功能都是由通过执行一系列命令来完成的 大部分NetBIOS命令都有等待 同步 和非等待 异步 两种调用方式 NetBIOS命令执行方式 等待方式 指NetBIOS要等到该命令完成之后才能返回到主调程序 只有少数几个NetBIOS命令必须采用这种方式 如NetBIOS复位命令 取消命令等 非等待方式 将处理程序地址 回调地址 或一个事件句柄传递给NetBIOS 让它在命令完成时唤醒该处理程序或触发一个事件 命令发送后NetBIOS立即返回到主调程序 当该命令执行完成时将自动唤醒处理程序或触发相应的事件 2 1 5网络控制块 NCB 第二章基于NetBios的网络编程 NCB 网络控制块 提供执行一个NetBIOS命令需要的全部信息 在WIN32环境下 各种NetBIOS命令是通过调用NetBIOSAPI的Netbios函数来实现的 该函数的调用方式为 UCHARNetbios PNCBpNCB 在头文件Nb30 h内定义有用于NetBIOS的所有函数声明 常数 若想连接NetBIOS应用 唯一需要的库是Netapi32 lib 例 include pragmacomment lib netapi32 lib PNCBncb1 Netbios 2 1 5网络控制块 NCB 第二章基于NetBios的网络编程 struct NCB UCHARncb command commandcodeUCHARncb retcode returncodeUCHARncb lsn localsessionnumberUCHARncb num numberofournetworknamePUCHARncb buffer addressofmessagebufferWORDncb length sizeofmessagebufferUCHARncb callname NCBNAMSZ blank paddednameofremoteUCHARncb name NCBNAMSZ ourblank paddednetnameUCHARncb rto rcvtimeout retrycountUCHARncb sto sendtimeout systimeoutvoid CALLBACK ncb post struct NCB POSTroutineaddressUCHARncb lana num lana adapter numberUCHARncb cmd cplt 0 xff commmandpendingUCHARncb reserve 10 reserved usedbyBIOSHANDLEncb event HANDLEtoWin32eventwhichwillbesettothe signalledstatewhenanASYNCHcommandcompletes NCB PNCB 2 1 5网络控制块 NCB 第二章基于NetBios的网络编程 NCB结构各字段含义说明如下 1 ncb command 指定要执行的NetBIOS命令 许多命令都可同步或异步 通过将NetBIOS命令代码与ASYNCH 0X80 标志按位OR运算来表示异步执行 2 ncb retcode 指定操作的立即返回代码 在一个异步操作进行期间 函数会将该值设为NRC PENDING 3 ncb lsn 对应一个本地会话编号 与当前环境内的一次会话有着唯一对应的关系 成功执行了一次NCBCALL或NCBLISTEN命令后 函数会返回一个新的会话编号 4 ncb num 指定本地名字的编号 伴随NCBADDNAME或NCBADDGRNAME命令的每一次调用 都会返回一个新编号 针对所有数据报命令 都必须使用一个有效的编号 5 ncb buffer 指向数据缓冲区 对那些需要发送数据的命令 该缓冲区包含了要送出的实际数据 而对那些需要接收数据的命令 则包含了要从NetBIOS函数返回的数据 6 ncb length 以字节数为单位 指定缓冲区的长度 对于接收命令来说 NetBIOS会将该值设为收到的字节数 若指定的缓冲区不够大 NetBIOS就会返回NRC BUFLEN错误 2 1 5网络控制块 NCB 第二章基于NetBios的网络编程 7 ncb callname 指定远程应用的名字 8 ncb name 指定应用程序本地名字 9 ncb rto 设定接收操作的超时期限 该值应设为500毫秒的一个整数倍数 若为 1 表示没有超时限制 该值是为NCBCALL和NCBLISTEN命令设置的 它们会影响后续的NCBRECV命令 10 ncb sto 设定发送操作的超时期限 该值应设为500毫秒的一个整数倍数 若为 1 表示不存在超时限制 该值是为NCBCALL和NCBLISTEN命令设置的 它们会影响后续的NCBSEND和NCBCHAINSEND命令 11 ncb post 指定异步命令完成后需要调用的后例程的地址 函数定义为 voidCALLBACKPostRoutine PNCBpncb 其中 pncb指向已完成命令的网络控制块 12 ncb lana num 指定要在上面执行命令的LANA编号 13 ncb cmd cpl 指定操作的最终返回代码 异步操作进行期间 Netbios会将这个值设为NRC PENDING 14 ncb reserve 保留 必须为0 2 1 5网络控制块 NCB 第二章基于NetBios的网络编程 15 ncb event 指定设置为 无信号 Nonsignaled 状态的一个Windows事件对象的句柄 完成一个异步命令后 事件便会设置成它的 有信号 Signaled 状态 通知并唤醒应用程序一个异步命令执行结束 返回码可由ncb cmd cpl字段获得 假若ncb command未设置ASYNCH标志 或者ncb post不为0 那么该字段必须为0 否则 NetBIOS会返回NRC ILLCMD错误 注意 并不是在对NetBIOS的每次调用中都需要用到该结构内的全部成员 有些数据字段对应的是输出参数 即NetBIOS调用返回之后才能设置 在此提醒大家重要的一点 进行任何NetBIOS调用之前 应先将这个NCB结构清零 然后再开始填写结构内的相应成员 2 2NetBIOS命名功能 第二章基于NetBios的网络编程 名字管理命令数据报通信命令会话通信命令控制和测试命令 2 2 1名字管理命令 第二章基于NetBios的网络编程 NetBIOS名字管理命令包括AddName AddGroupName DeleteName3条 每条命令都有等待和非等待两种方式 通常均应采用等待方式 1 AddName命令命令代码 NCBADDNAME 等待 NCBADDNAME ASYNCH 非等待 命令功能 在本地名字表中添加一个唯一名字 并返回一个名字号 NCB输入 ncb command NCBADDNAME 0 x30 或NCBADDNAME ASYNCH 0 xB0 ncb name 要添加的16字节名字串 最后一个字符为 空 字符 ncb post 异步命令完成后需要调用的后例程地址或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb num 返回新注册名字的编号 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 1名字管理命令 第二章基于NetBios的网络编程 例 加名字UCHARAddName UCHAR Name UCHAR NameNum NCBncb memset 2 2 1名字管理命令 第二章基于NetBios的网络编程 2 AddGroupName命令代码 NCBADDNAME 等待 NCBADDNAME ASYNCH 非等待 命令功能 在本地名字表中添加一个组名 并返回一个名字号 NCB输入 ncb command NCBADDGRNAME 0 x36 或NCBADDGRNAME ASYNCH 0 xB6 ncb name 要添加的16字节的组名字符串 最后一个字符应为 空 字符 ncb post 指定异步命令完成后需要调用的后例程的地址或 空 ncb event 指定异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb num 返回新注册组名的编号 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 1名字管理命令 第二章基于NetBios的网络编程 例 加组名UCHARAddGroupName UCHAR Name UCHAR NameNum NCBncb memset 2 2 1名字管理命令 第二章基于NetBios的网络编程 3 DeleteName命令代码 NCBDELNAME 等待 NCBDELNAME ASYNCH 非等待 命令功能 在本地名字表中删除一个唯一名或组名 NCB输入 ncb command NCBDELNAME 0 x31 或NCBDELNAME ASYNCH 0 xB1 ncb name 要删除的16字节的唯一名或组名字符串 ncb post 指定异步命令完成后需要调用的后例程的地址或 空 ncb event 指定异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb num 返回新注册组名的编号 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 1名字管理命令 第二章基于NetBios的网络编程 例 删除一个唯一名或组名UCHARDeleteName UCHAR Name NCBncb memset 2 2 2数据报通信命令 第二章基于NetBios的网络编程 NetBIOS的数据报通信命令包括SendDatagram ReceiveDatagram SendBroadeast ReceiveBroadeast4条 每条命令都有等待和非等待两种方式 通常情况下数据报发送采用等待方式 而数据报接收则采用非等待方式 1 SendDatagram命令命令代码 NCBDGSEND 等待 NCBDGSEND ASYNCH 非等待 命令功能 发送一个数据报给指定的远程名字 数据报最大长度为512字节 NCB输入 ncb command NCBDGSEND 0 x20 或NCBDGSEND ASYNCH 0 xA0 ncb num 本地名字号 ncb callname 远程名字 ncb buffer 发送缓冲区的指针 ncb length 发送缓冲区的长度 1 512字节 ncb post 指定异步命令完成后需要调用的后例程的地址或 空 ncb event 指定异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 2数据报通信命令 第二章基于NetBios的网络编程 例 数据报发送函数voidDatagramSend PNCBpncb UCHARDestName UCHARNum UCHAR pBuffer WORDLength memset pncb 0 sizeof NCB pncb ncb command NCBDGSEND strcpy pncb ncb callname DestName pncb ncb num Num pncb ncb buffer pBuffer pncb ncb length Length Netbios pncb 2 2 2数据报通信命令 第二章基于NetBios的网络编程 2 ReceiveDatagram命令命令代码 NCBDGRECV 等待 NCBDGRECV ASYNCH 非等待 命令功能 接收来自任何一个用户的 发送给本地某一唯一名或组名的一个数据报 但不接收广播报 接收数据报最大长度为512字节 如果收到的数据报长度大于ncb length字段规定的长度 剩余部分就被丢弃 NCB输入 ncb command NCBDGRECV 0 x21 或NCBDGRECV ASYNCH 0 xA1 ncb num 本地名字号 可以是唯一名字号也可以是组名号 ncb buffer 接收缓冲区的指针 ncb length 接收缓冲区的长度 1 512字节 ncb post 指定异步命令完成后需要调用的后例程的地址或 空 ncb event 指定异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb callname 发送方的名字 ncb length 实际收到的字节数 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 2数据报通信命令 第二章基于NetBios的网络编程 例 数据报接收函数voidDatagramRecv PNCBpncb UCHARNum HANDLEhEvent UCHAR pBuffer memset pncb 0 sizeof NCB pncb ncb command NCBDGRECV ASYNCH pncb ncb num Num pncb ncb buffer pBuffer pncb ncb length 512 pncb ncb cmd cplt 0 xff pncb ncb event hEvent Netbios pncb 2 2 2数据报通信命令 第二章基于NetBios的网络编程 3 SendBroadcastDatagram命令命令代码 NCBDGSENDBC 等待 NCBDGSENDBC ASYNCH 非等待 命令功能 向各个工作站发出一个广播数据报 NCB输入 ncb command NCBDGSENDBC 0 x22 或NCBDGSENDBC ASYNCH 0 xA2 ncb num 本地名字号 ncb buffer 发送缓冲区的指针 ncb length 发送缓冲区的长度 1 512字节 ncb post 指定异步命令完成后需要调用的后例程的地址或 空 ncb event 指定异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 2 2 2数据报通信命令 第二章基于NetBios的网络编程 NCB输出 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING ncb callname 发送方的名字 ncb length 实际收到的字节数 ncb retcode 命令立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 2数据报通信命令 第二章基于NetBios的网络编程 例 广播数据报发送函数voidDatagramSendBC PNCBpncb UCHARNum UCHAR pBuffer WORDLength memset pncb 0 sizeof NCB pncb ncb command NCBDGSENDBC pncb ncb num Num pncb ncb buffer pBuffer pncb ncb length Length Netbios pncb 2 2 2数据报通信命令 第二章基于NetBios的网络编程 4 ReceiveBroadcastDatagram命令命令代码 NCBDGRECVBC 等待 NCBDGRECVBC ASYNCH 非等待 命令功能 接收来自任何一个用户的广播数据报 但不接收普通数据报 数据报最大长度为512字节 如果收到的数据报长度大于ncb length字段规定的长度 剩余部分就被丢弃 要特别注意是 该命令没有超时功能 因此 应避免采用等待方式 否则会引起无限期等待 NCB输入 ncb command NCBDGRECVBC 0 x23 或NCBDGRECVBC ASYNCH 0 xA3 ncb num 本地名字号 可以是唯一名字号也可以是组名号 ncb buffer 接收缓冲区的指针 ncb length 接收缓冲区的长度 1 512字节 ncb post 异步命令完成后需要调用的后例程的地址或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 2 2 2数据报通信命令 第二章基于NetBios的网络编程 NCB输出 ncb callname 发送方的名字 ncb length 实际收到的字节数 ncb retcode 命令立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 2数据报通信命令 第二章基于NetBios的网络编程 例 广播数据报接收函数voidDatagramRecvBC PNCBpncb UCHARNum HANDLEhEvent UCHAR pBuffer memset pncb 0 sizeof NCB pncb ncb command NCBDGRECVBC ASYNCH pncb ncb num Num pncb ncb buffer pBuffer pncb ncb length 512 pncb ncb cmd cplt 0 xff pncb ncb event hEvent Netbios pncb 2 2 3会话通信命令 第二章基于NetBios的网络编程 NetBIOS的会话通信命令包括Call Listen Send SendReceive ReceiveAny HangUp ChainSend SendNoAck ChainSendNoAck9条 每条命令都有等待和非等待两种方式 通常情况下发送采用等待方式 而接收则采用非等待方式 1 Call命令命令代码 NCBCALL 等待 NCBCALL ASYNCH 非等待 命令功能 请求与某个远程工作站建立一个会话 要在两个名字之间真正建立会话 对方必须已经发出Listen命令才行 如果Call命令成功 NetBIOS即返回一个本地会话号LSN 供后面的会话通信命令引用 如果Call命令呼叫的对方没有发出Listen命令 那么Call命令会反复试几次 最后返回出错信息 2 2 3会话通信命令 第二章基于NetBios的网络编程 NCB输入 ncb command NCBCALL 0 x10 或NCBCALL ASYNCH 0 x90 ncb callname 远程名字 ncb name 本地名字 ncb rto 接收时限 以0 5秒为单位 ncb sto 发送时限 以0 5秒为单位 ncb post 指定异步命令完成后需要调用的后例程的地址或 空 ncb event 指定异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb lsn 分配的本地会话号 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 例 呼叫函数voidNetbiosCall PNCBpncb HANDLEhEvent UCHARSourName UCHARDestName memset pncb 0 sizeof NCB pncb ncb command NCBCALL ASYNCH strcpy pncb ncb name SourName strcpy pncb ncb callname DestName pncb ncb rto RECVTIMEOUT pncb ncb sto SENDTIMEOUT pncb ncb cmd cplt 0 xff pncb ncb event hEvent Netbios pncb 2 2 3会话通信命令 第二章基于NetBios的网络编程 2 Listen命令命令代码 NCBLISTEN 等待 NCBLISTEN ASYNCH 非等待 命令功能 侦听远程工作站的会话呼叫 Call 请求 建立一个会话 远程工作站会话名由NCB CALLNAME字段指定 如果NCB CALLNAME字段的第1字节为 号 则可以响应任何站对本站的呼叫 如果Listen命令成功 NetBIOS就会返回一个本地会话号LSN 供后面的发送 接收 挂机命令引用 对于泛指的Listen命令 还返回呼叫方的名字 Call Listen命令可以多次被使用 在同一对命令之间建立多个会话 如果同时发出的Listen命令不止一条 那么指定名字的Listen命令比泛指 名字的命令优先级别高 2 2 3会话通信命令 第二章基于NetBios的网络编程 NCB输入 ncb command NCBLISTEN 0 x11 或NCBLISTEN ASYNCH 0 x91 ncb callname 呼叫方名字 表示可以响应任何站对本站的呼叫 ncb name 本地名字 ncb rto 接收时限 以0 5秒为单位 ncb sto 发送时限 以0 5秒为单位 ncb post 异步命令完成后需要调用的后例程的地址或 空 ncb event 异步命令完成后触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb lsn 分配的本地会话号 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 例 侦听函数voidNetbiosListen PNCBpncb HANDLEhEvent UCHARSourName UCHARDestName memset pncb 0 sizeof NCB pncb ncb command NCBLISTEN ASYNCH strcpy pncb ncb name SourName strcpy pncb ncb callname DestName pncb ncb cmd cplt 0 xff pncb ncb sto SENDTIMEOUT pncb ncb event hEvent Netbios pncb 2 2 3会话通信命令 第二章基于NetBios的网络编程 3 Send命令命令代码 NCBSEND 等待 NCBSEND ASYNCH 非等待 命令功能 向指定的会话方发一个长度为1 65535字节的信息分组 通信对方由会话号NCB LSN指定 信息分组长度由NCB LENGTH指定 发送数据缓存地址由NCB BUFFER指针指定 Send命令的时限是在Call或Listen命令中指定的 如果超时的时候对方还没有成功地接收到信息分组 则会话非正常终止 返回超时出错信息 此外 不论何种原因造成Send不能完成 都使会话终止 返回相应的出错信息 2 2 3会话通信命令 第二章基于NetBios的网络编程 NCB输入 ncb command NCBSEND Oxl4 NCBSEND ASYNCH Ox94 ncb lsn 本地会话号 ncb buffer 指向要发送数据的指针 ncb length 要发送数据的字节数 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成后需触发的事件句柄 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 例 会话发送函数voidSessionSend PNCBpncb UCHARNum HANDLEhEvent UCHAR pBuffer WORDLength memset pncb 0 sizeof NCB pncb ncb command NCBSEND ASYNCH pncb ncb lsn Num pncb ncb buffer pBuffer pncb ncb length Length pncb ncb cmd cplt 0 xff pncb ncb event hEvent Netbios pncb 2 2 3会话通信命令 第二章基于NetBios的网络编程 4 ChainSend命令命令代码 NCBCHAINSEND NCBCHAINSEND ASYNCH命令功能 其功能与Send命令相似 只是它一次发出2个数据缓存 总长度可达131070字节 通信对方由会话号NCB LSN指定 第一个发送数据缓存地址由NCB BUFFER指针指定 分组长度由NCB LENGTH指定 NCB CALLNAME的头2个字节用来指定第2个缓存的长度 接下去的4个字节用作指向第二缓存的指针 NCB输入 ncb command NCBCHAINSEND Oxl7 NCBCHAINSEND ASYNCH Ox97 ncb lsn 本地会话号 ncb buffer 指向第一个要发送数据缓存的指针 ncb length 第一个数据缓存的字节数 ncb callname 第二个数据缓存的长度及指针 2 2 3会话通信命令 第二章基于NetBios的网络编程 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb retcode 命令立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 5 SendNoAck命令命令代码 NCBSENDNA 等待 NCBSENDNA ASYNCH 非等待 命令功能 其功能与Send命令相似 只是它不要求接收方发应答 因此执行速度稍快一些 从可靠性上来看 这种方式不如标准会话 NCB输入 ncb command NCBSENDNA Ox71 NCBSENDNA ASYNCH OxF1 ncb lsn 本地会话号 ncb buffer 指向要发送数据的指针 ncb length 要发送数据的字节数 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 6 ChainSendNoAck命令命令代码 NCBCHAINSENDNA NCBCHAINSENDNA ASYNCH 非等待 命令功能 其功能与ChainSend命令相似 只是它不要求接收方发应答 因此执行速度稍快一些 从可靠性上来看 这种方式不如标准会话 NCB输入 ncb command NCBCHAINSEND Ox72 NCBCHAINSEND ASYNCH OxF2 ncb lsn 本地会话号 ncb buffer 指向第一个要发送数据缓存的指针 ncb length 第一个数据缓存的字节数 ncb callname 第二个数据缓存的长度及指针 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 2 2 3会话通信命令 第二章基于NetBios的网络编程 7 Receive命令命令代码 NCBRECV 等待 NCBRECV ASYNCH 非等待 命令功能 接收由会话对方发过来的数据 完成接收命令的时限是由Call命令或Listen命令指定 而不是由Receive命令本身决定 如果接收超时 不会引起会话终止 如果给Receive命令规定的缓存长度小于要接收的数据的长度 则会发生0 x06差错 这时可以再发一条Receive命令 接收剩余的数据 但必须在超时之前完成 2 2 3会话通信命令 第二章基于NetBios的网络编程 NCB输入 ncb command NCBRECV Oxl5 NCBRECV ASYNCH Ox95 ncb lsn 本地会话号 ncb buffer 接收缓冲区指针 ncb length 接收缓冲区长度 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb length 实际收到的字节数 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 例 会话接收函数voidSessionRecv PNCBpncb UCHARNum HANDLEhEvent UCHAR pBuffer memset pncb 0 sizeof NCB pncb ncb command NCBRECV ASYNCH pncb ncb lsn Num pncb ncb buffer pBuffer pncb ncb length MAXPACKETLENGTH pncb ncb cmd cplt 0 xff pncb ncb event hEvent Netbios pncb 2 2 3会话通信命令 第二章基于NetBios的网络编程 8 ReceiveAny命令命令代码 NCBRECVANY NCBRECVANY ASYNCH 非等待 命令功能 在这条命令中指定的是接收方的名字号 而不是某一个会话号 因此可以接收所有会话对方发来的数据 如果再进一步 指定接收方的名字号NCB NUM为0 xFF 则可以接收所有名字的所有会话对方发来的数据 如果同时有几条Receive命令要执行 则先执行Receive 再执行指定名字的ReceiveAny 最后执行不指定名字的ReceiveAny命令 ReceiveAny命令没有超时机制 因此使用等待方式时要小心 2 2 3会话通信命令 第二章基于NetBios的网络编程 NCB输入 ncb command NCBRECVANY Oxl6 NCBRECVANY ASYNCH Ox96 ncb num 本地名字号 0 xFF泛指所有名字 ncb buffer 接收缓冲区指针 ncb length 接收缓冲区长度 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb num 接收方的名字号 ncb length 实际收到的字节数 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 9 HangUp命令命令代码 NCBHANGUP 等待 NCBHANGUP ASYNCH 非等待 命令功能 在会话结束时 双方都要发这条命令 关闭会话 NCB输入 ncb command NCBHANGUP Oxl2 NCBHANGUP ASYNCH Ox92 ncb lsn 本地会话号 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PENDING 2 2 3会话通信命令 第二章基于NetBios的网络编程 例 会话挂起函数UCHARHangupSession UCHARSessionNum NCBncb UCHARucRc memset 2 2 4控制和测试命令 第二章基于NetBios的网络编程 控制和测试命令共有5条 包括3条控制命令 ResetAdapter Cancel和Unlink 和2条测试命令 SessionStatus和CetAdapterStatus 控制命令都只有WAIT一种状态 1 ResetAdapter命令命令代码 NCBRESET 等待 命令功能 复位NetBIOS 清除所有的会话信息 删除名字表上的所有名字 重新设置最大会话数 最大名字数和最大未决NCB数 如果一个工作站有多个适配器 则本命令只对NCBLANA NUM字段指定的适配器复位 最大会话数 最大名字数和最大未决NCB数分别由ncb ncb callname 0 ncb ncb callname 2 和ncb num来设定 如果这三个字段取值0 x00 表示采用缺省值 取决于具体操作系统 为了改善网络性能 这三个值不要取得过大 ncb ncb callname 3 字段用来指定是否允许主机名作为NetBIOS名字 2 2 4控制和测试命令 第二章基于NetBios的网络编程 NCB输入 ncb command NCBRESET Ox32 ncb num 最大未决NCB数 0为缺省 ncb ncb callname 0 最大会话数 0为缺省 ncb ncb callname 2 最大名字数 0为缺省 ncb ncb callname 3 设置主机名作为NetBIOS名字 TRUE 允许 FALSE 禁止 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 0 x03 无效命令 0 x23 NCB LANA NUM无效 0 x40 0 x4F 特殊网络状态 0 x50 0 xFE 适配器故障 2 2 4控制和测试命令 第二章基于NetBios的网络编程 例 复位NetBIOS函数UCHARRestNCB void NCBncb UCHARucRc memset 2 2 4控制和测试命令 第二章基于NetBios的网络编程 2 Cancel命令命令代码 NCBCANCEL 等待 命令功能 取消一条没有执行完的命令 值得注意的是某些命令是不能被取消的 这些命令包括名字管理命令 数据报发送命令 及测试控制命令 Cancel命令的返回代码只表示本命令的执行情况 和被取消的命令无关 被取消命令的信息返回给它自己的NCB CMD CPLT字段 NCB输入 ncb command NCBCANCEL Ox35 ncb buffer 指向要取消的NCB的指针 ncb lana num 网络适配器编号 选0或1 NCB输出 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 0 x24 要取消的命令已经执行完了 0 x26 该命令不允许取消 2 2 4控制和测试命令 第二章基于NetBios的网络编程 例 取消一个命令函数UCHARCancelNcb PNCBpCancelNcb NCBncb UCHARucRc memset 2 2 4控制和测试命令 第二章基于NetBios的网络编程 3 Unlink命令命令代码 NCBUNLINK 等待 命令功能 这条命令只适用于无盘工作站 一般的工作站不用此命令 无盘工作站靠网络引导 在工作站和文件服务器之间建立一个专门的会话 在要将它自己从网络中拆线时使用此命令 在执行完Unlink命令之后 这个会话终止 工作站与文件服务器之间的双向通信结束 NCB输入 ncb command NCBUNLINK Ox70 ncb lana num 要拆线的网络适配器编号 选0或1 NCB输出 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 2 2 4控制和测试命令 第二章基于NetBios的网络编程 4 SessionStatus命令命令代码 NCBSSTAT 等待 NCBSSTAT ASYNCH 非等待 命令功能 获取由NCB NAME字段指定的名字相关的各会话的状态 如NCB NAME的第一个字节是 号 就返回在本地名字表上的会话信息 如果返回信息太多 缓存中装不下 则返回0 x06出错信息 NCB输入 ncb command NCBSSTAT Ox34 NCBSSTAT ASYNCH OxB4 ncb name 本地名字 指所有名字 ncb buffer 状态缓冲区指针 ncb length 状态缓冲区长度 ncb post 指向POST程序的指针 或 空 ncb event 异步命令完成后需触发的事件句柄 同步命令时为 空 ncb lana num 网络适配器编号 选0或1 2 2 4控制和测试命令 第二章基于NetBios的网络编程 NCB输出 ncb length 实际返回的字节数 ncb retcode 命令的立即返回码 成功为NRC GOODRET 0 x00 ncb cmd cplt 命令的最终返回码 成功为NRC GOODRET 0 x00 在异步等待期该字段值为NRC PEN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人教版9年级数学上册《概率初步》同步测试试卷(含答案详解)
- 2025政法干警试卷含答案详解(预热题)
- 广西工商职业技术学院单招《语文》通关题库【学生专用】附答案详解
- 2024安全监察人员试卷及答案详解(全优)
- 2024-2025学年度药店相关技能鉴定检测卷含答案详解【黄金题型】
- 2025年度中国地质调查局自然资源综合调查指挥中心招聘社会在职人模拟试卷附答案详解(巩固)
- 苏州安全生产培训官方课件
- 2025年黑龙江省基层法律服务工作者执业核准考试冲刺试题及答案二
- 2025云南省基层法律服务工作者考试冲刺试题及答案二
- 个人收入构成与管理动画解析
- 2025年江西省高考物理真题
- PLC电气控制设计污水处理系统样本
- 青春筑梦强国有我
- 班组质量管理和现场管理培训
- 新一代5G网络-全网部署与优化
- 导学案:化学合成材料
- 高中通用技术作品设计方案七篇
- MT-T 1199-2023 煤矿用防爆柴油机无轨胶轮运输车辆通用安全技术条件
- Linux系统基础操作培训文档
- 酿造车间绩效考核制度
- 石油化工工艺装置蒸汽管道配管的设计
评论
0/150
提交评论