国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

利用NetBIOS進行Windows網(wǎng)絡編程

2023-06-06 12:10:45
字體:
供稿:網(wǎng)友

本文介紹了NetBIOS編程的一些基本概念,并通過一個異步事件服務器和一個異步事件客戶機的例子,詳細說明了NetBIOS進行Windows編程的基本方法。文中涉及的程序在Windows98環(huán)境下,由VC++6.0編譯通過。

“網(wǎng)絡基本輸入/輸出系統(tǒng)”(Network Basic Input/Output System,NetBIOS)是1983年由Sytex公司為IBM公司開發(fā)的一種標準應用程序編程接口,并被微軟采用。1985年,IBM改進了NetBIOS,推出了NetBIOS擴展用戶接口(NetBIOS Extended User Interface,NetBEUI)通信協(xié)議,它占用內(nèi)存少,配置簡單,適用于小型局域網(wǎng)不同計算機之間的通信,但不具有跨網(wǎng)段工作的能力,不支持路由機制。NetBIOS是一種與“協(xié)議無關”的編程接口,它使應用程序不用理解網(wǎng)絡細節(jié),應用程序可通過TCP/IP、NetBEUI、SPX/IPX運行。下面我們介紹以下NetBIOS編程用到的一些重要概念及其實現(xiàn)方法。

一、理解NetBIOS

1、 LANA編號

理解LAN適配器(LAN Adapter,LANA)編號是NetBIOS進行網(wǎng)絡編程的關鍵所在。網(wǎng)絡的傳輸協(xié)議是通過LANA編號同NetBIOS對應起來,每個LANA編號對應于網(wǎng)卡及傳輸協(xié)議的唯一組合。因此,我們在編程時要注意,兩臺要進行通信計算機必須至少安裝有同一種協(xié)議,并且這兩臺計算機通信所依賴的LANA編號對應的網(wǎng)絡協(xié)議要相同,否則即使這兩臺計算機安裝相同的協(xié)議也無法進行通信。LANA編號范圍在0到9之間,其中,LANA 0代表默認的LANA。

2、 NetBIOS名字

NetBIOS名字可分為兩種類型:唯一名字(Unique Name)和組名(Group Name)。顧名思義,唯一名字只允許一臺計算機注冊該名字,一旦唯一名字注冊成功,其他計算機如果再注冊該名字,就會出現(xiàn):“名字重復”的錯誤,微軟網(wǎng)絡中的機器名采用的就是NetBIOS唯一名字。組名則是一組計算機的總稱,可以用來接收發(fā)給這一組計算機的數(shù)據(jù)。值得注意的是:組名可以和唯一名字同名,這會引起發(fā)送或接收數(shù)據(jù)的目的出現(xiàn)錯誤!NetBIOS名字長度為16個字符,其中第16個字符用于區(qū)分不同的網(wǎng)絡服務。關于計算機注冊NetBIOS名字的信息可以利用Nbtstatming令查看。

3、 NetBIOS提供的服務

NetBIOS提供兩種服務:面向連接的服務和數(shù)據(jù)報服務(無連接)。面向連接的服務為兩臺需要進行通信的計算機建立一個連接,并利用錯誤探測和恢復機制保證數(shù)據(jù)在通信的兩端準確無誤的傳輸,它適于傳輸比較長的消息。對于NetBIOS,服務器在對想通過它建立通信的LANA編號上注冊,而對于位于其他計算機上的客戶機會搜索服務器注冊的名字,并將它解析為機器名,然后發(fā)出進行通信的請求。

數(shù)據(jù)報服務是無連接的,因而它不能保證數(shù)據(jù)有序、正確的傳輸,但它可以節(jié)省建立連接的開銷,它適合短消息的傳輸。在NetBIOS中,客戶機只是將發(fā)送數(shù)據(jù)的目的地定義為服務器注冊的進程名,而不進行任何連接。

二、NetBIOS編程的實現(xiàn)

NetBIOS的所有函數(shù)聲明、常數(shù)都在頭文件“Nb30.h”中定義,在編程時還須與Netapi32.lib庫進行鏈接。NetBIOS接口通過一個函數(shù)實現(xiàn):

UCHAR Netbios (PNCB pNCB);

其中,參數(shù)pNCB指向一個網(wǎng)絡控制塊(Net Control Block,NCB)指針,NCB結構如下:

typedef struct _NCB {
            UCHAR ncb_command; // NetBIOSming令
            UCHAR ncb_retcode; // 指定操作的返回代碼 
            UCHAR ncb_lsn; // 本地會話編號 
            UCHAR ncb_num; // 本地名字編號 
            PUCHAR ncb_buffer; // 數(shù)據(jù)緩沖區(qū)地址 
            WORD ncb_length; // 緩沖區(qū)長度 
            UCHAR ncb_callname[NCBNAMSZ]; // 遠程應用程序名
            UCHAR ncb_name[NCBNAMSZ]; // 本地應用程序名 
            UCHAR ncb_rto; // 接收操作延時
            UCHAR ncb_sto; // 發(fā)送操作延時
            void (CALLBACK *ncb_post)( struct _NCB * );

    // 異步ming令完成后需調(diào)用的后例程地址 
            UCHAR ncb_lana_num; // LANA 編號
            UCHAR ncb_cmd_cplt; // 指定操作的返回代碼 
            UCHAR ncb_reserve[10]; // 保留字段 
            HANDLE ncb_event; // Win32事件句柄
        } NCB, *PNCB;

此外,編程時應注意調(diào)用NetBIOS函數(shù)的同步和異步問題。NetBIOSming令調(diào)用本身均為同步,即在完成指定ming令之前,會一直調(diào)用NetBIOS模塊。而在實際編程時,我們通常需要進行異步調(diào)用,即希望允許多個客戶機同時與服務器進行連接,這就需要讓NetBIOSming令與異步標志邏輯或(OR)操作,但必須在ncb_post字段中指定一個后例程,或在ncb_event字段中指定一個事件句柄。

下面,我以實現(xiàn)一個異步事件服務器和一個異步事件客戶機為例,具體說明NetBIOS的編程實現(xiàn),其中,服務器接收由客戶機發(fā)送的數(shù)據(jù)。

1、 異步事件服務器的實現(xiàn)

首先,我們進行初始化工作,列舉可用的LANA編號,并重設:

if (LanaEnum(&lenum) != NRC_GOODRET)
            return 1;
        if (ResetAll(&lenum, (UCHAR)MAX_SESSIONS, (UCHAR)MAX_NAMES,FALSE) != NRC_GOODRET)
            return 1;

&lenum是一個LANA_ENUM結構變量,其定義如下:

typedef struct LANA_ENUM
        {
            UCHAR length ;
            UCHAR lana[MAX_LANA+1] ;
       } LANA_ENUM, *PLANA_ENUM;

其中,length指出本地計算機可用的LANA的數(shù)量,lana表示由這些LANA編號組成的一個數(shù)組。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 郓城县| 天门市| 新绛县| 蚌埠市| 始兴县| 运城市| 湖北省| 平顺县| 嘉善县| 双鸭山市| 德化县| 伽师县| 大同县| 汉中市| 怀宁县| 岳阳县| 高唐县| 商洛市| 奉化市| 绵阳市| 金华市| 碌曲县| 汶川县| 廊坊市| 墨脱县| 巴林右旗| 镇远县| 花莲县| 辽中县| 贵南县| 忻州市| 三门县| 开封市| 丹东市| 镶黄旗| 阜南县| 江津市| 利川市| 长寿区| 德格县| 伊金霍洛旗|