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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

10、一個windows事件對象的句柄 NCB,*PNCB; . 并不是在對NetBIOS的每次調用中都需求用到Ncb構造內的全部成員,在調用一個NetBIOS命令時并不一定要填寫每一個NCB域;此外,NCB中的一些域具有輸出參數的功能,命令執行后的前往值將填充到這些域中。 還該當留意的是,在填寫NCB構呵斥員之前,必需對這個NCB構造清零,消除殘留參數的影響,然后再開場填寫構造內的相應成員。.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接口函數2運用函數Netbios必需留意: 程序的頭文件中必需包含“nb30.h: include 程序在鏈接時參與“netapi32.lib: pragma comment(lib,“netapi32.lib).2.2 NetBIOS命令 NetBIOS的一切功能都是經過執行一系列的命令來完成的,共26條命令。

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

13、T、NCBCANCEL、NCBUNLINK; 測試命令2條: NCBSSTAT、NCBASTAT 名字管理命令3條: NCBADDNAME、NCBADDGRNAME、NCBDELNAME 數據報通訊命令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的初始化程序主要包括兩個函數:EnumLana():獲得當前一切可用的網卡編號0254ResetNcb():復位指定網卡上的NetBIOS接口,并重設相關的環境參數 ResetNcb()必需在一切NetBIOS運用中首先被執行,只需初始化勝利,才干進展后面的任務。.LanaEnum()NCB輸入: ncb_command

15、 = NCBENUM ncb_buffer: 分配一個LANA_ENUM構造 ncb_length: 設為LANA_ENUM構造的長度NCB輸出: ncb_cmd_cplt: 命令的最終前往碼,勝利為NRC_GOODRET 假設命令勝利執行,那么會填充指定的LANA_ENUM構造,其構造定義如下:Typedef struct LANA_ENUM UCHAR length; /指出本地計算機共有多少個LANA編號 UCHAR lanaMAX_LANA; /由實踐的LANA編號構成的一個數組, 而length值指出lana數組內有多少個元素會被填充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:可同時進展的最大會話數0為缺省 ncb_callname2:可添加的最大NetBIOS名字數0為缺省 ncb_callna

17、me3:能否允許主機名作為本人的NetBIOS名字 ncb_lana_num: 指定要執行復位的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()函數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);.數據報接納函數DatagramRecv()NCB輸入: ncb_command = NCBDGRECV|ASYNCH ncb_num: 本地名字號接納方為本人注冊的名字編號 ncb_callname: 發送方的NetBIOS名字 ncb_buffer: 指向接納緩沖區的指針 ncb_length: 接納緩沖區的長度1512字節 ncb_event: 指定異步命令完成后

20、需觸發的事件句柄,同步命令為“空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創建事件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);.簡單數據報通訊程序例如 發送方“abc不斷給接納方“xyz發送數據數據內容由用戶指定,雙方直到收到一條“exit音訊后停頓通訊。.數據報發送程序.數據報接納程序.程序闡明1、發送方程序采用循環發送構造,接納方程

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

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

25、于一切任務站均接納廣播音訊,因此發送方在發送廣播數據報時無需指定ncb_callname的值。.利用廣播通訊實現時間同步程序例如 假設有一個規范時間效力器,當網內一個任務站發出“對時懇求數據報后,規范時間效力器便以廣播方式發送一個規范時間,以同步局域網內一切任務站的基準時間。.時間效力器任務站ResetNcb()AddName()SendBaseTime()DeleteName()ResetNcb()AddName()RecvBaseTime()DeleteName()懇求基準時間 WaitTimeRequest()發送基準時間 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命令測試網絡中任一個目前正在任務的任務站的網絡適配器形狀。NCB輸入: ncb_command = NCBASTAT ncb_callname: 任務站名字 ncb_lana_num: 指定要執行命令的LANA編號 ncb_buffer: 形狀緩沖區指針 ncb_length: 形狀緩沖區長度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 會話通訊程序設計 會話是一種面向銜接的可靠通訊方式。與數據報相比,會話通訊可以保證數據的完好性、抵達順序及傳輸的可靠性。普通分成三個階段:建立銜接數據傳輸斷開銜接.基于NetBIOS的會話通訊模型效力器客戶機ResetNcb()AddName()Listen()HangUp()ResetNcb()AddName()Call()HangUp()建立會話銜接Send/Recv()Recv/Send會話通訊DeleteName()DeleteName()封鎖會話.NetBIOS的會話通訊步驟 初始化。通訊雙方分別執行NCBRESET命令,復位各自的NetBIOS。 添加名字。

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

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

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

33、不是在后面的發送/接納命令中指定的。ncb_sto發送時限和ncb_rto接納時限兩個字段的值是以0.5s為單位的,假設設為“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: 發送時限以0.5s為單位 ncb_event: 指定異步命令完成后需觸發的事件句柄,同步命令時為“空 NCB輸出:

35、 ncb_lsn: 分配的本地會話號 ncb_cmd_cplt: 命令的最終前往碼.留意:1、ncb_callname字段的第一個字節為 * 號,那么可以呼應任何站對本站的呼叫。假設Listen命令勝利,NetBIOS就會前往一個本地會話號lsn,供后面的發送、接納、掛機命令援用。2、Call/Listen命令可以多次被運用,在同一對命令間建立多個會話。3、Listen命令是沒有超時機制的,應防止運用Wait方式,否那么有能夠產生無限等待。4、在會話過程中發送超時和接納超時的時限應在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數據發送Send命令命令代碼:NCBSEND、 NCBSEND|ASYNCH命令

37、功能:向指定的會話方發一個長度為165535字節的音訊. NCB輸入: ncb_command = NCBSEND或 NCBSEND|ASYNCH ncb_lsn: 本地會話號 ncb_buffer: 指定要發送數據的緩存地址 ncb_length: 要發送數據的字節數 ncb_event: 指定異步命令完成后需觸發的事件句柄,同步命令時為“空 NCB輸出: ncb_cmd_cplt: 命令的最終前往碼 留意:發送的時限是在Call或Listen中指定的,假設超時的時候對方還沒有收到數據,那么會話非正常終止,前往超時出錯信息。此外,不論何種緣由呵斥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數據接納Receive命令命令代碼:NCBRECV、 NCBRECV|ASYNCH命令功能:接納由會話方發過來的數據。. NCB輸入: ncb_command = NCBSEND或 NCBSEND|

39、ASYNCH ncb_lsn: 本地會話號 ncb_buffer: 接納緩存區指針 ncb_length: 接納緩沖區長度 ncb_event: 指定異步命令完成后需觸發的事件句柄,同步命令時為“空 NCB輸出: ncb_length: 實踐收到的字節數 ncb_cmd_cplt: 命令的最終前往碼 留意:接納的時限是在Call或Listen中指定的,假設接納超時,不會引起會話終止。假設給Recevie命令規定的緩存長度小于要接納的數據長度,那么會發生錯誤,這時可以再發一條Receive命令,接納剩余的數據但必需在超時之前完成.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命令功能:在會話終了時,雙方都要發這條命令,表示封鎖會話。. NCB輸入: ncb_command = NCBHANGUP或 NCBHANGUP|ASYNCH ncb_lsn: 本地會話號 ncb_event: 指定異步命令完成后需觸發的事件句柄,同步命令時為“空 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論