麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

利用NetBIOS進行Windows網絡編程

2023-06-06 12:10:45
字體:
來源:轉載
供稿:網友

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

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

一、理解NetBIOS

1、 LANA編號

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

2、 NetBIOS名字

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

3、 NetBIOS提供的服務

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

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

二、NetBIOS編程的實現

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

UCHAR Netbios (PNCB pNCB);

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

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

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

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

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

1、 異步事件服務器的實現

首先,我們進行初始化工作,列舉可用的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的數量,lana表示由這些LANA編號組成的一個數組。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: h色网站在线观看 | 色播视频在线播放 | 曰韩毛片 | 91av大片| 羞羞漫画无遮挡观看 | 九九热在线视频观看这里只有精品 | 毛片免费视频播放 | 欧美性受ⅹ╳╳╳黑人a性爽 | 中文字幕 欧美 日韩 | 一区二区精品在线 | 亚洲精品一区二区三区免 | 欧美成人精品一区 | 黄网站免费观看视频 | hdbbwsexvideo| 精品亚洲二区 | 狠狠色噜噜狠狠狠米奇9999 | 31freehdxxxx欧美| 欧美成人高清在线 | 在线成人免费观看视频 | av7777777| 日韩精品久久久久久久九岛 | 中国fx性欧美xxxx | 久久草草亚洲蜜桃臀 | 成年性羞羞视频免费观看无限 | 国产精品久久久久久久久久久久午夜 | 国产精品久久久久久久久久三级 | 国产chinesehd精品91 | 久久大陆 | 国产精品自拍片 | 一区二区视频在线看 | 成人福利电影在线观看 | 亚洲99| 国产一区二区视频观看 | 免费淫视频| 久久成人午夜视频 | 成人精品一区二区 | 人成免费a级毛片 | 成年免费视频黄网站在线观看 | 中文字幕欧美亚洲 | 久草在线观看福利 | 色柚视频网站ww色 |