第2章基于NetBIOS的網(wǎng)絡編程ppt課件_第1頁
第2章基于NetBIOS的網(wǎng)絡編程ppt課件_第2頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第2章 基于NetBIOS的網(wǎng)絡編程 網(wǎng)絡根本輸入/輸出系統(tǒng)NetBIOS是一個傳統(tǒng)的運用程序接口API,用于數(shù)據(jù)源和目的地之間的數(shù)據(jù)交換。 NetBIOS 同時兼容于較老的操作系統(tǒng),如O S / 2和D O S等。NetBIOS為程序提供了懇求低級網(wǎng)絡效力的一致命令集,從而實現(xiàn)了給局域網(wǎng)LAN提供網(wǎng)絡以及其他特殊功能的目的。 目前NetBIOS改良版NetBEUI與TCP/IP以及IPX/SPX合稱為LAN通訊三大協(xié)議。此外,幾乎一切的LAN都是在NetBIOS協(xié)議根底上任務的。 .第2章 基于NetBIOS的網(wǎng)絡編程2.1 NetBIOS的根本概念2.2 NetBIOS命令2.3 數(shù)據(jù)報通

2、訊程序設(shè)計2.4 會話通訊程序設(shè)計.2.1.1 NetBIOS概述 NetBIOS是一種規(guī)范的運用程序編程接口API,1983年由Sytex公司專為IBM開發(fā)勝利,它為網(wǎng)絡通訊定義了一種編程接口。1985年,IBM創(chuàng)建了NetBIOS擴展用戶接口NetBEUI,它同NetBIOS接口集成在一同,構(gòu)成了一套完好的協(xié)議。后來由于NetBIOS接口愈來愈流行,所以各大廠商也開場在其他如TCP/IP協(xié)議上實施NetBIOS程序接口。.NetBIOS特性1、NetBIOS API接口適用于為數(shù)眾多的網(wǎng)絡協(xié)議,使得程序接口“與協(xié)議無關(guān)。 2、NetBIOS協(xié)議短小精練,與TCP/IP和IPX/SPX相比具

3、有極高的網(wǎng)絡通訊性能,非常適用于實時性要求較高的小型LAN網(wǎng)絡環(huán)境3、NetBIOS同時提供了“面向銜接與“非面向銜接無銜接效力 .NetBIOS特性4、利用NetBIOS接口編程必需留意以下三個問題: 為保證兩個NetBIOS運用程序經(jīng)過網(wǎng)絡進展正常通訊,那么對它們各自執(zhí)行的計算機來說,至少必需安裝一種兩者通用的協(xié)議 Microsoft TCP/IP和NetBEUI在默許的情況下已提供了NetBIOS接口,但是IPX/SPX卻并非如此; 與TCP/IP和IPX/SPX不同,NetBEUI不是一種“可路由協(xié)議,因此要想在兩個不同子網(wǎng)中保證兩個NetBIOS運用程序正常通訊,那么在配置網(wǎng)絡時,至

4、少應安裝一種可路由的傳送協(xié)議。.NetBIOS在Windows中的運用Windows的客戶機/效力器C/S網(wǎng)絡系統(tǒng)就是基于NetBIOS的網(wǎng)絡;Windows NT操作系統(tǒng)中的大量的內(nèi)部聯(lián)網(wǎng)任務也都是利用NetBIOS來完成的。微軟還為許多協(xié)議提供了規(guī)范NetBIOS界面,如TCP/IP、NetBEUI和NWLink,使NetBIOS的運用更加趨于方便網(wǎng)絡運用舉例:閱讀網(wǎng)上鄰居、共享文件.Windows 2000/XP中的NetBIOS的設(shè)置DHCP是Dynamic Host Configuration Protocol的縮寫,它是TCPIP協(xié)議簇中的一種,主要是用來給網(wǎng)絡客戶機分配動態(tài)的IP

5、地址。這些被分配的IP地址都是DHCP效力器預先保管的一個由多個地址組成的地址集,并且它們普通是一段延續(xù)的地址。在TCP/IP上運用NetBIOS需求LMHOSTS與WINS效力器來注冊NetBIOS名字。.Windows 2000/XP中的NetBEUI的設(shè)置.2.1.2 LANA編號問題:傳送協(xié)議與NetBIOS如何對應起來呢? LANA編號LAN適配器編號定義:每個LANA編號對應于網(wǎng)卡及傳輸協(xié)議的獨一組合。舉例:假定某任務站安裝了兩塊網(wǎng)卡,以及兩種具有NetBIOS才干地傳輸協(xié)議:TCP/IP和NetBEUI,那么總共就有4個LANA編號。.LANA編號下面是它們之間的一種對應關(guān)系:

6、0 NetBEUI網(wǎng)卡1 1 TCP/IP網(wǎng)卡1 2 NetBEUI網(wǎng)卡2 3 TCP/IP網(wǎng)卡2 通常,LANA編號的范圍在09之間,除LANA 0之外,其它編號由操作系統(tǒng)自行分配,LANA 0表示的是“默許LANA假設(shè)某任務站裝有兩塊網(wǎng)卡以及三種具有NetBIOS才干的傳輸協(xié)議如TCP/IP、NetBEUI和IPX/SPX,那么它有多少個LANA編號?.2.1.3 NetBIOS名字NetBIOS是一種按名字任務的系統(tǒng),NetBIOS保管一張名字表,每個名字都是16字節(jié)長。NetBIOS名字有兩種類型:獨一名:某個節(jié)點的運用進程在網(wǎng)絡中注冊的獨一無二的名字。組名:多個節(jié)點可擁有同一組名。主

7、要用于多點發(fā)送的數(shù)據(jù)通訊,.NetBIOS名字留意:1、為一個節(jié)點指定名字時,留意不要用“*號或二進制“0開頭,也不要用“IBM這3個字母開頭。2、對每個LANA來說,可以添加的名字的最大數(shù)量是254,名字號從1到2540和255由系統(tǒng)保管.2.1.4 NetBIOS接口函數(shù)NetBIOS API函數(shù): UCHAR NetbiosPNCB pncb1該函數(shù)只需一個參數(shù)pncb,它對應于指向某個網(wǎng)絡控制塊NCB的一個指針,在NCB構(gòu)造中,包含了為執(zhí)行一個Netbios命令相對應的Netbios函數(shù)需求用到的全部信息。構(gòu)造定義見書上P14P15:.typedef struct _NCB UCHAR

8、 ncb_command; /指定要執(zhí)行的 Netbios命令 UCHAR ncb_retcode; /指定操作的前往值 UCHAR ncb_lsn; /對應一個本地交互編 號,勝利執(zhí)行NCBCALL或NCBLISTEN 命令后,函數(shù)會前往一個新的交互編號 UCHAR ncb_num; /指定本地名字的編號, NCBADDNAME或NCBADDGRNAME命 令的每一次運用,都會前往一個新的編號 PUCHAR ncb_buffer; /指向數(shù)據(jù)緩沖區(qū) WORD ncb_length; /指定緩沖區(qū)的長度 UCHAR ncb_callnameNCBNAMSZ; /指定 遠程運用程序名字 .UCH

9、AR ncb_nameNCBNAMSZ; /指定運用程 序知的名字 UCHAR ncb_rto; /設(shè)置接納操作的超時期限 UCHAR ncb_sto; /設(shè)置發(fā)送操作的超時期限 void (CALLBACK*ncb_post) (struct _NCB *); / 指定異步命令完成后需 要運用的post例程的地址 UCHAR ncb_lana_num; /指定要在上面執(zhí)行命 令的LANA編號 UCHAR ncb_cmd_cplt; /指定操作代碼的前往 值 UCHAR ncb_reserve10; /保管,必需為0 HANDLE ncb_event; /指定設(shè)置Nonsignaled 形狀的

10、一個windows事件對象的句柄 NCB,*PNCB; . 并不是在對NetBIOS的每次調(diào)用中都需求用到Ncb構(gòu)造內(nèi)的全部成員,在調(diào)用一個NetBIOS命令時并不一定要填寫每一個NCB域;此外,NCB中的一些域具有輸出參數(shù)的功能,命令執(zhí)行后的前往值將填充到這些域中。 還該當留意的是,在填寫NCB構(gòu)呵斥員之前,必需對這個NCB構(gòu)造清零,消除殘留參數(shù)的影響,然后再開場填寫構(gòu)造內(nèi)的相應成員。.UCHAR AddName(CHAR * Name,UCHAR Lana,UCHAR * NameNum) NCB ncb; memset(&ncb,0,sizeof(NCB); ncb.ncb_comman

11、d=NCBADDNAME; ncb.ncb_lana_num=Lana; strcpy(char * )ncb.ncb_name,Name); Netbios(&ncb); * NameNum=ncb.ncb_num; return(ncb.ncb_cmd_cplt);.NetBIOS接口函數(shù)2運用函數(shù)Netbios必需留意: 程序的頭文件中必需包含“nb30.h: include 程序在鏈接時參與“netapi32.lib: pragma comment(lib,“netapi32.lib).2.2 NetBIOS命令 NetBIOS的一切功能都是經(jīng)過執(zhí)行一系列的命令來完成的,共26條命令。

12、 1NetBIOS命令中大多命令都有同步等待或異步非等待兩種形狀,一切命令默以為同步: 同步形狀:命令原型 異步形狀:命令原型|ASYNCH . 同步方式和異步方式的比較: 采用同步方式時,NetBIOS要等到該命令完成之后才干前往到他的程序。采用異步方式時,將后續(xù)處置程序的地址或一個事件句柄通知給NetBIOS,然后NetBIOS立刻前往到當前程序,當該命令執(zhí)行完成時將自動喚醒處置程序或觸發(fā)相應的事件。 為了提高程序的執(zhí)行效率,通常采用異步方式,只需少數(shù)幾個NetBIOS命令必需采用同步方式,如NetBIOS復位命令。 .226條命令分類: 控制和測試命令5條: 控制命令3條:NCBRESE

13、T、NCBCANCEL、NCBUNLINK; 測試命令2條: NCBSSTAT、NCBASTAT 名字管理命令3條: NCBADDNAME、NCBADDGRNAME、NCBDELNAME 數(shù)據(jù)報通訊命令4條: NCBDGSEND 或NCBDGSEND|ASYNCH NCBDGRECV 或NCBDGRECV|ASYNCH NCBDGSENDBC或NCBDGSENDBC|ASYNCH NCBDGRECVBC或NCBDGRECVBC|ASYNCH. 會話通訊命令9條: NCBCALL、NCBLISTEN、NCBSEND、NCBCHAINSEND、NCBSENDNA、NCBCHAINSENDNA、NC

14、BRECV、NCBRECVANY、NCBHANGUP 其他5條: NCBACTION、NCBENUM、NCBFINDNAME、NCBLANSTALERT、NCBTRACE.2.3 根本程序2.3.1 初始化程序2.3.2 加名字與刪除名字.2.3.1 初始化程序 NetBIOS的初始化程序主要包括兩個函數(shù):EnumLana():獲得當前一切可用的網(wǎng)卡編號0254ResetNcb():復位指定網(wǎng)卡上的NetBIOS接口,并重設(shè)相關(guān)的環(huán)境參數(shù) ResetNcb()必需在一切NetBIOS運用中首先被執(zhí)行,只需初始化勝利,才干進展后面的任務。.LanaEnum()NCB輸入: ncb_command

15、 = NCBENUM ncb_buffer: 分配一個LANA_ENUM構(gòu)造 ncb_length: 設(shè)為LANA_ENUM構(gòu)造的長度NCB輸出: ncb_cmd_cplt: 命令的最終前往碼,勝利為NRC_GOODRET 假設(shè)命令勝利執(zhí)行,那么會填充指定的LANA_ENUM構(gòu)造,其構(gòu)造定義如下:Typedef struct LANA_ENUM UCHAR length; /指出本地計算機共有多少個LANA編號 UCHAR lanaMAX_LANA; /由實踐的LANA編號構(gòu)成的一個數(shù)組, 而length值指出lana數(shù)組內(nèi)有多少個元素會被填充LANA編號。.UCHAR LanaEnum(LA

16、NA_ENUM *lenum) NCB ncb; UCHAR ucRc; memset(&ncb,0,sizeof(NCB); ncb.ncb_command=NCBENUM; ncb.ncb_buffer=(PUCHAR)lenum; ncb.ncb_length=sizeof(LANA_ENUM); ucRc=Netbios(&ncb); return(ucRc);.ResetNcbNCB輸入: ncb_command = NCBRESET ncb_callname0:可同時進展的最大會話數(shù)0為缺省 ncb_callname2:可添加的最大NetBIOS名字數(shù)0為缺省 ncb_callna

17、me3:能否允許主機名作為本人的NetBIOS名字 ncb_lana_num: 指定要執(zhí)行復位的LANA編號NCB輸出: ncb_cmd_cplt: 命令的最終前往碼,勝利為 NRC_GOODRET0 .UCHAR RestNCB(UCHAR lana) NCB ncb; UCHAR ucRc; memset(&ncb,0,sizeof(NCB); ncb.ncb_command=NCBRESET; ncb.ncb_callname0=MAXSESSIONS; ncb.ncb_callname2=MAXNAMES; ncb.ncb_callname3=TRUE; ncb.ncb_lana_nu

18、m=lana; ucRc=Netbios(&ncb); return(ucRc);.初始化NetBIOS程序例如.改造main()函數(shù)void main() LANA_ENUM lenum; UCHAR ucRc; int i; PNCB pncb; ucRc=LanaEnum(&lenum); if(ucRc!=0) printf(LanaEnum Error code:%d,ucRc); return; else printf(LanaEnum ok!%dn,lenum.length); for(i=0;incb_command=NCBDGSEND; strcpy(char *)pncb-

19、ncb_callname,(char * )DestName); pncb-ncb_num=Num; pncb-ncb_buffer=pBuffer; pncb-ncb_length=Length; Netbios(pncb);.數(shù)據(jù)報接納函數(shù)DatagramRecv()NCB輸入: ncb_command = NCBDGRECV|ASYNCH ncb_num: 本地名字號接納方為本人注冊的名字編號 ncb_callname: 發(fā)送方的NetBIOS名字 ncb_buffer: 指向接納緩沖區(qū)的指針 ncb_length: 接納緩沖區(qū)的長度1512字節(jié) ncb_event: 指定異步命令完成后

20、需觸發(fā)的事件句柄,同步命令為“空NCB輸出: ncb_cmd_cplt: 命令的最終前往碼,勝利為 NRC_GOODRET.void DatagramRecv(PNCB pncb,UCHAR * Name,UCHAR Num, HANDLE hEvent,UCHAR * Buff) memset(pncb,0,sizeof(NCB); pncb-ncb_command=NCBDGRECV|ASYNCH; strcpy(char *)pncb-ncb_callname,(char * )Name); pncb-ncb_num=Num; pncb-ncb_buffer=Buff; pncb-ncb

21、_length=512; pncb-ncb_cmd_cplt=0 xff; pncb-ncb_event=hEvent; Netbios(pncb);.1創(chuàng)建事件HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEvent,/平安屬性 BOOL bManuaReset,/能否人工重置 BOOL bInitialState, /初始能否有信號形狀 LPCTSTR lpName /名字).DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds) hHandle:同步對象句柄 dwMillis

22、econds:以毫秒為單位的超時間隔.hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); if(hEvent=NULL) return;.DatagramRecv(&RecvNcb,(UCHAR *)RemoteName,LocalNameNum,hEvent,buff);WaitForSingleObject(hEvent,0 xffffffff);.簡單數(shù)據(jù)報通訊程序例如 發(fā)送方“abc不斷給接納方“xyz發(fā)送數(shù)據(jù)數(shù)據(jù)內(nèi)容由用戶指定,雙方直到收到一條“exit音訊后停頓通訊。.數(shù)據(jù)報發(fā)送程序.數(shù)據(jù)報接納程序.程序闡明1、發(fā)送方程序采用循環(huán)發(fā)送構(gòu)造,接納方程

23、序采用循環(huán)接納構(gòu)造。當發(fā)送方從鍵盤上鍵入一個字符串后,發(fā)送程序?qū)⒃撟址鳛閿?shù)據(jù)報直接發(fā)送給接納方,接納方在收到一個數(shù)據(jù)報后,將收到的字符串顯示在屏幕上,假設(shè)發(fā)送方鍵入的是“exit,那么通訊雙方終了通訊,程序退出。2、接納方程序用到了兩個Windows API函數(shù):創(chuàng)建事件函數(shù)CreateEvent()和等待事件函數(shù)WaitForSingleObject(),利用這兩個函數(shù)的目的是用來配合處置異步接納命令。.2.3.2 組播與廣播通訊程序組播通訊程序設(shè)計: 組播通訊與點對點通訊程序的構(gòu)造類似,所用的發(fā)送和接納命令也一樣,只是發(fā)送方在指定接受方的名字時應設(shè)置為特定的遠程組名,而多個接納方均應運

24、用一樣的組名來設(shè)置接納。這樣,只需發(fā)送方發(fā)送一個特定的組播數(shù)據(jù)報,那些以特定組名等待接納的進程均能同時接納到這個組播數(shù)據(jù)報。課堂練習作業(yè)1:擬寫程序?qū)崿F(xiàn)組播通訊。.發(fā)送方 接納任務組ResetNcb()AddName()Send()DeleteName()ResetNcb()AddGRName()Recv()DeleteName()發(fā)送數(shù)據(jù)報到任務組.作業(yè)一P56頁2.3 2.4 2.5 2.62.10.廣播通訊程序設(shè)計: 廣播通訊與組播通訊略有不同,主要差別在于: 1. 廣播發(fā)送與接納應采用特定的廣播命令,廣播發(fā)送用NCBDGSENDBC命令,而廣播接納用NCBDGRECVBC命令 2. 由

25、于一切任務站均接納廣播音訊,因此發(fā)送方在發(fā)送廣播數(shù)據(jù)報時無需指定ncb_callname的值。.利用廣播通訊實現(xiàn)時間同步程序例如 假設(shè)有一個規(guī)范時間效力器,當網(wǎng)內(nèi)一個任務站發(fā)出“對時懇求數(shù)據(jù)報后,規(guī)范時間效力器便以廣播方式發(fā)送一個規(guī)范時間,以同步局域網(wǎng)內(nèi)一切任務站的基準時間。.時間效力器任務站ResetNcb()AddName()SendBaseTime()DeleteName()ResetNcb()AddName()RecvBaseTime()DeleteName()懇求基準時間 WaitTimeRequest()發(fā)送基準時間 RequestSystemTime().void SendBas

26、eTime(PNCB pncb,UCHAR Num, CHAR * pBuffer,WORD Length)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBDGSENDBC;pncb-ncb_num=Num;pncb-ncb_buffer=pBuffer;pncb-ncb_length=Length;Netbios(pncb);注:不需求指定接納方名字.void RecvBaseTime(PNCB pncb,UCHAR Num, UCHAR * pBuffer) memset(pncb,0,sizeof(NCB); pncb-ncb_command=

27、NCBDGRECVBC; pncb-ncb_num=Num; pncb-ncb_buffer=pBuffer; pncb-ncb_length=512; pncb-ncb_cmd_cplt=0 xff; Netbios(pncb);.補充:NCBASTAT命令測試網(wǎng)絡中任一個目前正在任務的任務站的網(wǎng)絡適配器形狀。NCB輸入: ncb_command = NCBASTAT ncb_callname: 任務站名字 ncb_lana_num: 指定要執(zhí)行命令的LANA編號 ncb_buffer: 形狀緩沖區(qū)指針 ncb_length: 形狀緩沖區(qū)長度NCB輸出: ncb_cmd_cplt: 命令的最

28、終前往碼,勝利為 NRC_GOODRET(0).UCHAR Astatus(UCHAR lana, PVOID pBuffer, int cbBuffer,char *szName)NCB ncb;ZeroMemory(&ncb,sizeof(NCB);ncb.ncb_command=NCBASTAT;ncb.ncb_lana_num=lana;ncb.ncb_buffer=(PUCHAR)pBuffer;ncb.ncb_length=cbBuffer;strcpy(char *)ncb.ncb_callname,szName);Netbios(&ncb);return(ncb.ncb_cmd

29、_cplt);.2.4 會話通訊程序設(shè)計 會話是一種面向銜接的可靠通訊方式。與數(shù)據(jù)報相比,會話通訊可以保證數(shù)據(jù)的完好性、抵達順序及傳輸?shù)目煽啃?。普通分成三個階段:建立銜接數(shù)據(jù)傳輸斷開銜接.基于NetBIOS的會話通訊模型效力器客戶機ResetNcb()AddName()Listen()HangUp()ResetNcb()AddName()Call()HangUp()建立會話銜接Send/Recv()Recv/Send會話通訊DeleteName()DeleteName()封鎖會話.NetBIOS的會話通訊步驟 初始化。通訊雙方分別執(zhí)行NCBRESET命令,復位各自的NetBIOS。 添加名字。

30、為了建立會話,通訊雙方應分別執(zhí)行NCBADDNAME命令,在各自的本地名字表中添加獨一名。.NetBIOS的會話通訊步驟 建立會話。在進展會話通訊之前,必需首先建立一個會話銜接。該過程需由效力器和客戶機協(xié)同完成,效力器方運用NCBLISTEN命令等待客戶機的銜接懇求,客戶方運用NCBCALL命令向效力器發(fā)起會話銜接懇求。一旦會話建立勝利,在雙方的NetBIOS接口上便會建立一個會話,并分別為會話雙方賦予獨一的會話號,以后通訊雙方就可以利用該會話號進展會話通訊。.NetBIOS的會話通訊步驟 數(shù)據(jù)傳輸。會話建立后,雙方便可利用NCBSEND和NCBRECV等會話命令進展會話通訊。 撤除會話。當數(shù)

31、據(jù)傳輸終了后,任何一方均可發(fā)出NCBHANGUP命令來撤除指定會話號上的會話銜接,以及時釋放系統(tǒng)資源。 刪除名字。在會話通訊進展終了后,雙方還應刪除各自本地名字表中的名字。.會話通訊命令 NetBIOS的會話通訊命令共有9條,每條命令都有等待和非等待兩種方式,通常情況下發(fā)送方采用等待方式,而接納方那么采用非等待方式。.1發(fā)起銜接懇求Call命令命令代碼:NCBCALL,NCBCALL|ASYNCH命令功能:懇求與某個遠程任務站建立一個會話. NCB輸入: ncb_command = NCBCALL 或 NCBCALL|ASYNCH ncb_name: 本地名字 ncb_callname: 遠程

32、名字 ncb_rto: 接納時限以0.5s為單位 ncb_sto: 發(fā)送時限以0.5s為單位 ncb_event: 指定異步命令完成后需觸發(fā)的事件句柄,同步命令時為“空 NCB輸出: ncb_lsn: 分配的本地會話號 ncb_cmd_cplt: 命令的最終前往碼.留意:1、要在兩個名字之間真正建立會話,對方必需曾經(jīng)發(fā)出Listen命令才行。假設(shè)Call命令勝利,NetBIOS即前往一個本地會話號LSN,供后面的會話通訊命令援用。假設(shè)Call命令呼叫的對方?jīng)]有發(fā)出Listen命令,那么Call命令會反復試幾次,最后前往出錯信息。2、在會話過程中發(fā)送超時和接納超時的時限應在Call命令中指定,而

33、不是在后面的發(fā)送/接納命令中指定的。ncb_sto發(fā)送時限和ncb_rto接納時限兩個字段的值是以0.5s為單位的,假設(shè)設(shè)為“0表示沒有超時機制,即可以無限期等待,這一點在運用時要非常小心。.void NetbiosCall(PNCB pncb,char SourName,char DestName)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBCALL;strcpy(char *)pncb-ncb_name,SourName);strcpy(char *)pncb-ncb_callname,DestName);pncb-ncb_rto=0;pnc

34、b-ncb_sto=10;Netbios(pncb);.2偵聽銜接懇求Listen命令命令代碼:NCBLISTEN、 NCBLISTEN|ASYNCH命令功能:偵聽遠程任務站的會話呼叫Call懇求,建立一個會話。. NCB輸入: ncb_command = NCBLISTEN或 NCBLISTEN|ASYNCH ncb_name: 本地名字 ncb_callname: 呼叫方的名字,“*表示可以呼應任何站對 本站的呼叫 ncb_rto: 接納時限以0.5s為單位 ncb_sto: 發(fā)送時限以0.5s為單位 ncb_event: 指定異步命令完成后需觸發(fā)的事件句柄,同步命令時為“空 NCB輸出:

35、 ncb_lsn: 分配的本地會話號 ncb_cmd_cplt: 命令的最終前往碼.留意:1、ncb_callname字段的第一個字節(jié)為 * 號,那么可以呼應任何站對本站的呼叫。假設(shè)Listen命令勝利,NetBIOS就會前往一個本地會話號lsn,供后面的發(fā)送、接納、掛機命令援用。2、Call/Listen命令可以多次被運用,在同一對命令間建立多個會話。3、Listen命令是沒有超時機制的,應防止運用Wait方式,否那么有能夠產(chǎn)生無限等待。4、在會話過程中發(fā)送超時和接納超時的時限應在Listen命令中指定。.void NetbiosListen(PNCB pncb,HANDLE hEvent,

36、char SourName,char DestName)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBLISTEN|ASYNCH;strcpy(char *)pncb-ncb_name,SourName);strcpy(char *)pncb-ncb_callname,DestName);pncb-ncb_rto=0;pncb-ncb_sto=5;pncb-ncb_cmd_cplt=0 xff;pncb-ncb_event=hEvent;Netbios(pncb);.3數(shù)據(jù)發(fā)送Send命令命令代碼:NCBSEND、 NCBSEND|ASYNCH命令

37、功能:向指定的會話方發(fā)一個長度為165535字節(jié)的音訊. NCB輸入: ncb_command = NCBSEND或 NCBSEND|ASYNCH ncb_lsn: 本地會話號 ncb_buffer: 指定要發(fā)送數(shù)據(jù)的緩存地址 ncb_length: 要發(fā)送數(shù)據(jù)的字節(jié)數(shù) ncb_event: 指定異步命令完成后需觸發(fā)的事件句柄,同步命令時為“空 NCB輸出: ncb_cmd_cplt: 命令的最終前往碼 留意:發(fā)送的時限是在Call或Listen中指定的,假設(shè)超時的時候?qū)Ψ竭€沒有收到數(shù)據(jù),那么會話非正常終止,前往超時出錯信息。此外,不論何種緣由呵斥Send不能完成,都會使會話終止,前往呼應的出

38、錯信息。.void SessionSend(PNCB pncb,UCHAR Num,UCHAR * pBuffer,WORD Length)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBSEND;pncb-ncb_lsn=Num;pncb-ncb_buffer=pBuffer;pncb-ncb_length=Length;Netbios(pncb);.4數(shù)據(jù)接納Receive命令命令代碼:NCBRECV、 NCBRECV|ASYNCH命令功能:接納由會話方發(fā)過來的數(shù)據(jù)。. NCB輸入: ncb_command = NCBSEND或 NCBSEND|

39、ASYNCH ncb_lsn: 本地會話號 ncb_buffer: 接納緩存區(qū)指針 ncb_length: 接納緩沖區(qū)長度 ncb_event: 指定異步命令完成后需觸發(fā)的事件句柄,同步命令時為“空 NCB輸出: ncb_length: 實踐收到的字節(jié)數(shù) ncb_cmd_cplt: 命令的最終前往碼 留意:接納的時限是在Call或Listen中指定的,假設(shè)接納超時,不會引起會話終止。假設(shè)給Recevie命令規(guī)定的緩存長度小于要接納的數(shù)據(jù)長度,那么會發(fā)生錯誤,這時可以再發(fā)一條Receive命令,接納剩余的數(shù)據(jù)但必需在超時之前完成.void SessionRecv(PNCB pncb,UCHAR

40、Num,HANDLE hEvent,UCHAR * pBuffer)memset(pncb,0,sizeof(NCB);pncb-ncb_command=NCBRECV|ASYNCH;pncb-ncb_lsn=Num;pncb-ncb_buffer=pBuffer;pncb-ncb_length=512;pncb-ncb_cmd_cplt=0 xff;pncb-ncb_event=hEvent;Netbios(pncb);.5封鎖會話Hang Up命令命令代碼:NCBHANGUP、 NCBHANGUP|ASYNCH命令功能:在會話終了時,雙方都要發(fā)這條命令,表示封鎖會話。. NCB輸入: ncb_command = NCBHANGUP或 NCBHANGUP|ASYNCH ncb_lsn: 本地會話號 ncb_event: 指定異步命令完成后需觸發(fā)的事件句柄,同步命令時為“空 NCB輸出: ncb_cmd_cplt: 命令的最終前往碼.void HangupSession(PNCB pncb,UCHAR SessionNum)memset(pncb,0,sizeof(NCB);pncb-ncb_c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論