NetBIOS特性与编程基础

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结构清零。

时间: 2024-10-28 07:26:57

NetBIOS特性与编程基础的相关文章

SHELL编程基础之BASH入门

1.了解SHELL 只要能够操作应用程序的接口都能够称shell.shell也是一个应用程序,工作在用户模式,运行为进程.shell进程主要用于提供命令行界面,提供一系列的工作特性,有些特性可以自行的设定.当用户通过多种方式登录到Linux操作系统时,我们就可以认为该用户打开了一个SHELL,从而和系统进行交互. shell在linux系统下的角色如下: 2.为什么要学习shell 命令行界面的shell是很不好的,但是学完之后好处却很多.例如图形化界面像windows xp.win 7每个版本

JavaScript的面向对象编程基础_基础知识

重新认识面向对象为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念: 一切事物皆对象 对象具有封装和继承特性 对象与对象之间使用消息通信,各自存在信息隐藏 以这三点做为依据,C++ 是半面向对象半面向过程语言,因为,虽然他实现了类的封装.继承和多态,但存在非对象性质的全局函数和变量.Java.C# 是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在.但这里函数本身是一个过程,只是依附在某个类上. 然

JAVA学习(五):Java面向对象编程基础

Java面向对象编程基础 面向对象(Object oriented programming,OOP)技术是一种强有力的软件开发方法,它采用数据抽象与信息隐藏技术,来使软件开发简单化,以达到代码重用的目的. 1.OOP的3个特性(封装.继承和多态性) 封装是类的基础,指把类的相关实现细节隐藏起来,在类中将数据和实现操作的代码集中起来放在对象的内部,调用这些类时只需直接使用类预留的接口就可以了. 继承提供了子类自动拥有父类数据结构和方法的机制,它表示类之间的一种关系. 多态指使一个对象被看成另一个对

009_《Delphi6编程基础》

<Delphi6编程基础> Delphi 教程 系列书籍 (009) <Delphi6编程基础> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2     作者: 肖建等 丛书名: 程序员指南丛书 出版社:清华大学出版社 ISBN:7302049734 上架时间:2001-12-17 出版日期:2002 年1月 页码:408 版次:1-1 内容简介 Delphi 6是Inprise(原Borland)公司推出的Delphi编程系列软件

《Java 7程序设计入门经典》一第1章 Java编程基础 1.0

第1章 Java编程基础 本章要点 了解计算机的主要组成: 理解位.字节和二进制计数系统: 了解程序的两种形式: 了解Java的历史和设计理念: 理解面向对象编程的基本原则: 创建.编译并运行一个简单的Java程序: 使用变量: 使用if和for控制语句: 创建代码块: 理解语句是如何放置.缩进和结束的: 了解Java关键字: 理解Java标识符的规则. 仅仅在近十年的时间里,编程就从一门晦涩难懂的学科转变为现代社会不可或缺的一部分,从事编程工作的人也从少变多.其发展原因容易理解.如果仅仅用一个

JavaScript的函数式编程基础指南_基础知识

引言 JavaScript是一种强大的,却被误解的编程语言.一些人喜欢说它是一个面向对象的编程语言,或者它是一个函数式编程语言.另外一些人喜欢说,它不是一个面向对象的编程语言,或者它不是一个函数式编程语言.还有人认为它兼具面向对象语言和函数式语言的特点,或者,认为它既不是面向对象的也不是函数式的,好吧,让我们先搁置那些争论. 让我们假设我们共有这样的一个使命:在JavaScript语言所允许的范围内,尽可能多的使用函数式编程的原则来编写程序. 首先,我们需要清理下脑子里那些关于函数式编程的错误观

PowerShell面向对象编程基础知识总结_PowerShell

本文介绍PowerShell面向对象编程的基础知识,我们知道PowerShell里面的所有变量和输出都是对象,所以有必要在进行PowerShell编程时了解一下面向对象编程的基础知识. 面向对象编程的引入主要是为了解决软件复杂化带来的维护等问题,早在20世纪60年代,面向对象就已经出现了.虽然C语言并不支持面向对象的特性,但是使用C语言进行开发的程序人员已经将面向对象的核心思想应用到其中,因此我们更应该理解的是面向对象的思想,而不需要纠缠于语言本身. PowerShell是基于对象的脚本语言,因

Android中的Socket编程基础

Socket 编程基础知识: 主要分服务器端编程和客户端编程. 服务器端编程步骤: 1: 创建服务器端套接字并绑定到一个端口上(0-1023是系统预留的,最好大约1024) 2 : 套接字设置监听模式等待连接请求 3: 接受连接请求后进行通信 4: 返回,等待赢 一个连接请求 客户端编程步骤: 1: 创建客户端套接字(指定服务器端IP地址与端口号 ) 2: 连接(Android 创建Socket时会自动连接) 3: 与服务器端进行通信 4: 关闭套接字 Android Socket 通信原理注意

浅谈.NET下的多线程和并行计算(九)Winform中多线程编程基础 下

在之前的文章中我们介绍过两种Timer和BackgroundWorker组件,在上文中我们提到过,强烈建议在UI 线程上操作控件,否则很容易产生人品问题.可以想到,上次介绍的两个Timer基于ThreadPool,回调方 法运行于不同于UI线程的新线程上,在这个方法中操作控件需要进行 Invoke或BeginInvoke.其实,还有 第三种System.Windows.Forms.Timer,它可以让回调事件在UI线程上执行,我们来做一个实验比较一下 System.Windows.Forms.T