TFTP網絡傳輸的設計與實現論文_第1頁
TFTP網絡傳輸的設計與實現論文_第2頁
TFTP網絡傳輸的設計與實現論文_第3頁
TFTP網絡傳輸的設計與實現論文_第4頁
TFTP網絡傳輸的設計與實現論文_第5頁
已閱讀5頁,還剩17頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

文檔可自由編輯打印26/22文檔可自由編輯打印文檔可自由編輯打印TFTP網絡傳輸協議的設計與實現摘要本文是在VC++6.0的環境下設計實現基于TFTP網絡傳輸協議的軟件,使產生可視化窗口,且使其操作方便。本論文中首先對TFTP協議的定義、內容、與其他網絡文件傳輸協議的區別及軟件的大致目的進行了簡要的介紹;然后簡單介紹了設計環境VC++6.0,并闡述了使用VC++6.0的原因;總結了一些軟件設計所需要網絡知識,并根據這些知識重點介紹了基于TFTP網絡協議的網絡傳輸軟件的設計實現方法,最后描述利用設計的軟件對文件傳輸的過程。關鍵字:TFTP,網絡傳輸,協議,VC6.0,軟件 TProtocolNetworkDesignandImplementationAbstractThisisVC++6.0inanenvironmentdesignedtoachieveanagreementbasedontheTsoftware,sothatthemiddleclass

Healthandvisualizationwindow,anditiseasytooperate.

Inthispaper,thefirstdefinitionoftheT,content,andothernetworkprotocolthedifferencebetween.Generalpurposesoftwareandabriefintroduction;andthenabriefintroductionofthedesignenvironmentVC++6.0,anddescribedtheuseofthereasonsforVC++6.0;summaryofanumberofsoftwaredesignknowledgerequiredforthenetworkandtheroot.ItisfocusedontheknowledgenetworkbasedontheTprotocoldesignsoftwaresideLaw,thefinaldescriptionoftheuseofdesignsoftwareforprocess.Keywords:TFTP,networktransmission,theagreement,VC6.0,software 第一章論文簡介1.1章節安排 第二章介紹了TFTP協議的定義、背景、及其特點,重點敘述了T的區別和TFTP的優點。第三章分析了TFTP軟件的設計環境和使用平臺。第四章首先敘述了設計TFTP軟件所需的網絡知識,重點分析了軟件的設計。第五章描述一次利用設計的軟件進行的文件傳輸。1.2設計目標 目前,FTP協議是網絡文件傳輸協議的主要使用協議,但小文件的傳輸,從傳輸速度上還是傾向于TFTP,現在基于TFTP協議的網絡傳輸軟件在Windows平臺下不是很多,且服務器和客戶端集成于一個軟件上,在操作和速度上有一定折扣,同時WINDOWS2000以上的操作系統都自帶TFTP客戶端,所以在這里設計一個簡便TFTP服務端軟件,不實現除了服務器以外別的功能,實現可視化操作,方便用戶使用?;谶@個原因和目標設計制作了此軟件。第二章TFTP協議的簡述2.1TFTP協議的定義TFTP英文全稱TrivialProtocol,即簡單文件傳輸協議是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。2.2TFTP協議的背景 2.2.1TFTP協議的背景TFTP協議是一個傳輸文件的簡單協議,它基于UDP協議而實現,使用UDP數據包。TFTP協議只支持文件傳輸而不支持交互。TFTP協議沒有一個龐大的命令集,沒有列目錄的功能也不能對用戶進行身份鑒別。TFTP協議傳輸8位數據。傳輸中有三種模式:netascii,這是8位的ASCII碼形式,另一種是octet,這是8位數據類型;最后一種mail已經不再支持,它將返回的數據直接返回給用戶而不是保存為文件。2.2.2TFTP協議與FTP協議的區別FTP協議同樣是文件網絡傳輸協議,與TFTP相比:兩者都是TCP/IP協議族的成員,都是用于文件傳送的協議,都是服務器/客戶端系統。同時也有不同:1.FTP協議是使用TCP,TFTP協議是基于UDP實現的。2.FTP協議以允許交互方式使用,而TFTP協議只允許文件單方面傳輸。3.TFP協議提供身份驗證,TFTP協議不。4.TFP協議使用TCP端口號:數據和鏈接對話框的2120,TFTP使用UDP的端口號69。2.3TFTP協議的特點TFTP網絡傳輸協議的主要特點是:1.每次傳送的數據PDU中有512字節的數據,但最后一次可不足512字2.數據PDU也稱為文件塊,每個塊按序編號,從1開始。3.支持ASCII碼或二進制傳送。4.可對文件進行讀和寫。5.使用很簡單的部首。2.4TFTP意義TFTP的穩定性沒有FTP好,也不能對用戶的身份進行確認,安全性也不高。但TFTP協議有其固有的優點:TFTP協議可用于UDP環境,當需要將程序或文件同時向許多機器下載時就往往需要使用TFTP協議。TFTP代碼所占的內存空間很小,這對較小的計算機或某些特殊用途的設備是很重要的。所以在現在的環境下,需要基于TFTP協議的網絡文件傳輸軟件。第三章TFTP的設計和使用平臺3.1VC6.0的簡述VisualC++VisualC++是一個功能強大的可視化軟件開發工具。自1993年Microsoft公司推出VisualC++1.0后,隨著其新版本的不斷問世,VisualC++已成為專業程序員進行軟件開發的首選工具。雖然微軟公司推出了VisualC++.NET(VisualC++7.0),但它的應用的很大的局限性,只適用于Windows2000,WindowsXP和WindowsNT4.0。所以實際中,更多的是以VisualC++6.0為平臺。VisualC++6.0不僅是一個C++編譯器,而且是一個基于Windows操作系統的可視化集成開發環境(integrateddevelopmentenvironment,IDE)。VisualC++6.0由許多組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導ClassWizard等開發工具。這些組件通過一個名為DeveloperStudio的組件集成為和諧的開發環境。VC6.0大概可以分成三個部分:1.DeveloperStudio2.MFC3.PlatformSDK3.2TFTP軟件設計使用VC6.0的原因 首先,語言方面對C/C++比較熟悉,所以使用C來制作這個軟件。雖說C的編譯器有許多,像:BCB3.0、5.0、6.0,MSVC1.0、4.2、6.0、7.0,GNUGCC2.95.5~等等,他們都有各自的優點。但在TFTP軟件的設計上依然選擇了熟悉的VC,因為VC對網絡、數據庫等方面的編程都提供了相應的編程環境支持,nBorlandC++或C++Builder也很不錯,并不比VC差。但BC的版本兼容性不好,從3.1到4.0就出現“代溝”,而且VC提供了極為豐富的文檔和范例,VC的參考資料也遠比BC多。而且大多數大型軟件(包括Windows自己)都是用C、C++編的,所以可以利用的源代碼特別多。例如Photoshop,就有VC的編程接口。的其他的語言都不如VC有歷史優勢。而且VC的開發工具特別多,從控件公司到硬件開發商,其產品很少敢不提供VC接口;VC家族中對VC6.0了解較多。所以TFTP軟件的設計環境選擇了VC6.0。3.3軟件的使用平臺WindowsXPWindowsXP中文全稱為視窗操作系統體驗版。是微軟公司發布的一款視窗操作系統。它發行于2001年10月微軟最初發行了兩個版本,家庭版(Home)和專業版(Professional)。家庭版的消費對象是家庭用戶,專業版則在家庭版的基礎上添加了新的為面向商業的設計的網絡認證、雙處理器等特性。且家庭版只支持1個處理器,專業版則支持2個。字母XP表示英文單詞的“體驗”(experience)。WindowsXP是基于Windows2000代碼的產品,同時擁有一個新的用戶圖形界面(叫做月神Luna),它包括了一些細微的修改,其中一些看起來是從Linux的桌面環境諸如KDE中獲得的靈感。帶有用戶圖形的登陸界面就是一個例子。此外,WindowsXP還引入了一個“基于人物”的用戶界面,使得工具條可以訪問任務的具體細節。它包括了簡化了的Windows2000的用戶安全特性,并整合了防火墻,以用來確保長期以來一直困擾微軟的安全問題。WindowsXP的最低系統要求:計算機使用時鐘頻率為300MHz或更高的處理器;至少需要233MHz(單個或雙處理器系統);使用IntelPentium/Celeron系列、AMDK6/Athlon/Duron系列或兼容的處理器,使用128MBRAM或更高(最低支持64M,可能會影響性能和某些功能),1.5GB可用硬盤空間,SuperVGA(800x600)或分辨率更高的視頻適配器和監視器,CD-ROM或DVD驅動器,鍵盤和Microsoft鼠標或兼容的指針設備。WindowsXP,或視窗XP是微軟公司的一款視窗操作系統。WindowsXP于2001年8月24日正式發布(RTM,ReleasetoManufacturing)。它的零售版于2001年10月25日上市。WindowsXP的外部版本是2002,內部版本是5.1(即WindowsNT5.1),正式版的Build是5.1.2600。微軟最初發行了兩個版本:專業版(WindowsXPProfessional)目前WindowsVISTA系統還不流行,現在WindowsXP還是主要使用的操作系統。因此設計的軟件是在WindowsXP環境下實現運行的。第四章基于TFTP的網絡傳輸軟件的設計4.1軟件背景知識4.1.1TFTP協議的報文分析 TFTP有五種報文結構它們分別是:讀文件請求包:Readrequest,簡寫為RRQ寫文件請求包:Writerequest,簡寫為WRQ文件數據包:Data,簡寫為DATA回應包:Acknowledgement,簡寫為ACK錯誤信息包:Error,簡寫為ERROR 五種報文結構如下圖所示:1.RRQ/WRQ,兩者結構類似,操作碼分別是1和2,文件名是NETASCII碼字符,這兩種報文都是以0結束的。 2.DATA包的操作碼是3,它包括有一個塊編號和數據。塊編號從1開始編碼,每個數據塊加1,這樣接收方可以確定這個包是新數據還是已經接收過的數據。數據域從0字節到512字節。如果數據域是512字節則它不是最后一個包,如果小于512字節則表示這個包是最后一個包。 3.ACK包只有兩部分組成,一部分是有兩個字節的操作碼,即4,另一部分是塊編號,也是兩個字節,即收到數據的塊編號。 4.ERROR包,它的操作碼是5,此包可以被其它任何類型的包確認。錯誤碼指定錯誤的類型,如:1.文件未找到訪問非法

2.磁盤滿或超過分配的配額

3.非法的TFTP操作

4.未知的傳輸ID

5.文件已經存在

6.沒有類似的用戶。

錯誤信息是供程序員使用的4.1.2TFTP協議的工作方式首先,客戶端向服務器發出一個請求,其中端口為69。然后,服務器向客戶端發出確認包,塊編號為0,包括B和A的TID。此時連接建立,如果是個寫請求,第一個數據包以序列號1從主機開始發出。以后兩臺主機要保證以開始時確定的TID進行通信。如果本來的ID與原來確定的ID不一樣,這個包會被認識為發送到了錯誤的地址而被拋棄。錯誤的包是被發送到正確端口的,但是包的本身有錯誤。設想發送方發出一個請求,這個請求在網絡的那個設備中被復制成兩個包,接受方會先后接收到兩個包。接收方會認為為這是兩個獨立的請求,會返回兩個應答。當這兩個應答其中之一被接收到時,連接已經建立。第二個應答再到達時,這個包會被拋棄,而不會因為接收到第二個應答包而導致第一個建立的連接失敗。如果傳輸的文件恰好是512字節的整數的倍數,則在文件傳送完畢后,還必須在最后發送一個只含首部而無數據的數據包,表示文件結束。若文件長度不是512字節的整數的倍數,則最后傳送數據包的數據字段一定不夠512字節,這正好作為文件結束的標志。在寫請求的情況下,TFTP客戶發送WRQ指明文件名和模式。如果該文件能被該客戶寫,TFTP服務器就返回塊編號為0的ACK包。該客戶就將文件的頭512字節以塊編號為1發出。服務器則返回塊編號為1的ACK。最后一種TFTP報文類型是差錯報文,它的操作碼為5。它用于服務器不能處理讀請求或寫請求的情況。在文件傳輸過程中的讀和寫差錯也會導致傳送這種報文,接著停止傳輸。差錯編號字段給出一個數字的差錯碼,跟著是一個ASCII表示的差錯報文字段,可能包含額外的操作系統說明的信息。TFTP如何預防因為一個包的丟失而崩潰呢?TFTP的工作很像停止等待協議。發送完一個文件塊后就等待對方的確認,確認時應指明所確認的塊編號。發送完數據后在規定時間內收不到確認就要重發數據包。發送確認包的一方若在規定時間內收不到下一個文件塊,也要重發確認塊。這樣就可以保證文件的傳送不會因為某一個數據包的丟失而告失敗。4.1.3網絡通信網絡通信的基礎是套接字(Socket),簡單的說就是通信的兩方的一種約定,用套接字中的相關函數來完成通信過程,一個套接字是通訊的一端。在這一端上你可以找到與其對應的一個名字。一個正在被使用的套接字都有它的類型和與其相關的進程。套接字存在于通訊域中。通訊域是為了處理一般的線程通過套接口通訊而引進的一種抽象概念。套接口通常和同一個域中的套接口交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序)。WindowsSockets規范支持單一的通訊域,即Internet域。各種進程使用這個域互相之間用Internet協議族來進行通訊(WindowsSockets1.1以上的版本支持其他的域,例如WindowsSockets2)。套接口可以根據通訊性質分類;這種性質對于用戶是可見的。應用程序一般僅在同一類的套接口間通訊。不過只要底層的通訊協議允許,不同類型的套接口間也照樣可以通訊。用戶目前可以使用兩種套接口,即流套接口和數據報套接口。流套接口提供了雙向的,有序的,無重復并且無記錄邊界的數據流服務。數據報套接口支持雙向的數據流,但并不保證是可靠,有序,無重復的。也就是說,一個從數據報套接口接收信息的進程有可能發現信息重復了,或者和發出時的順序不同。數據報套接口的一個重要特點是它保留了記錄邊界。對于這一特點,數據報套接口采用了與現在許多包交換網絡(例如以太網)非常類似的模型。在一次網絡通信/連接中有以下幾個參數需要被設置:本地IP地址-本地端口號-對方端口號-對方IP地址。左邊兩部分稱為一個半關聯,當與右邊兩部分建立連接后就稱為一個全關聯。在這個全關聯的套接口上可以雙向的交換數據。如果是使用無連接的通信則只需要建立一個半關聯,在發送和接收時指明另一半的參數就可以了,所以可以說無連接的通信是將數據發送到另一臺主機的指定端口。此外不論是有連接還是無連接的通信都不需要雙方的端口號相同。4.2基于TFTP網絡傳輸軟件的設計4.2.1設計思想所設計的這個基于TFTP協議網絡文件傳輸的軟件是作為一個服務端,客戶端發送請求,操作系統應該讓服務器軟件知曉,應該生成一個主機IP地址和TFTP端口號組合成的套接字,通過套接字操作系統找到應用程序?;谶@個軟件主要是實現小型文件傳輸,所需的內存不會很大,所以軟件開啟后可以保持服務器一直運行,等待客戶端的請求,可以使用while(1)來使這個實現。因為TFTP協議有五種報文格式,作為服務端軟件應該分清客戶端發來那種報文,分別作出什么反應,可以用一個switch語句來解決。TFTP服務端需提供文件讓客戶端讀取或下載,當客戶端提出所需文件之前,把文件放到服務端軟件知道的地方,軟件應該實現存放文件的地方和打開這些文件供客戶端使用。我們這個軟件還應該實現窗口化,易操作等一些方便用戶使用的設置。4.2.2TFTP報文的數據結構上面我們對TFTP協議的物理結構及其運行方式做了詳細的闡述,但這些如何在C中實現哪?及他們的數據結構是什么呢?在C中有一種數據類型可以很好表達上面五種報文,即struct結構。structWRQNode{unsignedshortintopCode;char[256];charzeros1;charmode[9];charzeros2;} 在這里首先用一個無符號的短整型opCode來定義操作碼,如果是1說明是讀請求報文,如果是2則是寫請求報文,接著用一個字符數組,來說明讀或寫的文件的名稱,字符類型數組mode[]說明傳輸的類型,zeros2說明了讀或寫報文結束的0字符。同樣我們可以列出剩余三種報文struct結構的頭文件structDATANode{unsignedshortintopCode;unsignedshortintblockNumber;chardata[1024];};structACKNode{unsignedshortintopCode;unsignedshortintblockNumber;};structERRNode{unsignedshortintopCode;unsignedshortinterrCode;charerrMsg[255];charzeros;};StructDATENode是指數據包,structACKNode是指確認包,ERRNode是指差錯包.每個struct結構中都有opCode,值分別是3、4、5。在DATENode和ACKNode中都有一個無符號的短整型blockNumber,指明的是塊編號,DATENode中的字符數組data[],指示數據包中的數據塊。同樣的ERRNode中的數據類型與上述的差錯報中的塊也是一一對應的。4.2.3TFTP報文用C語言的構成 T用C構成方式如下:intmakeACK(constACKNode&node,charbuf[],size_tsize){memset(buf,0,30);intres=4;if(res>int(size)){fprintf(stderr,"Buffersizeistoosmall!\n");return-1;}memcpy(buf+1,&node.opCode,1);if(node.blockNumber<256)memcpy(buf+3,&node.blockNumber,1);else//memcpy(buf+2,&node.blockNumber,sizeof(node.blockNumber));{buf[3]=char(node.blockNumber&255);buf[2]=char(node.blockNumber>>8);}函數中我們首先調用這樣一個函數:memset(buf,0,size),即初始化buf[]這部分內存,用0的ASCII碼填充size長度。再定義一個int變量res用2+2+(nread)來賦值,通過語句if(res>int(size)){…}來保證res小于等于buf[]的長度,即res的賦值正確。然后調用函數memcpy(buf+1,&node.opCode,1);這個函數把一個TFTP的數據包的操作碼入buf[]的下一個的內存中。占用倆個字節,同時利用下面的語句把塊編號即blockNumber寫入內存中:f(node.blockNumber<256)再次調用函數memcpy把數據塊也寫入內存中即memcpy(buf+4,&node.data,nread);最后returnres。這樣我們就把一個TFTP的數據包通過C語言寫入內存中,供我們調用。同樣的原理可以把別的TFTP報文寫入內存中,這里就不在累述。4.2.4TFTP服務端軟件的具體設計軟件的具體設計流程如下:●初始化Winsock庫,Winsock是指Windows下網絡編程的規范,全稱WindowsSockets是Windows下得到廣泛應用的、開放的、支持多種協議的網絡編程接口。WSADATAWSAData;(MAKEWORD(2,2),&WSAData);●創建套接字,套接字由IP和端口號組成,TFTP協議基于UDP協議實現,所以這里用的是UDP協議,所以協議類型為SOCK_DGRAMSOCKETsock=INVALID_SOCKET;sock=socket(AF_INET,SOCK_DGRAM,0);●初始化本地主機地址信息:即綁定套接字,把套接字綁定到服務器端口號69,這樣當客戶端發送請求時操作系統就知道如何找到服務器程序。structsockaddr_inServerAddr;ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=inet_addr(MyIp);ServerAddr.sin_port=htons(69);bind(sock,(structsockaddr*)&ServerAddr,sizeof(structsockaddr_in))●初始化遠程地址信息structsockaddr_inClient;Client.sin_family=AF_INET;Client.sin_port=htons(INADDR_ANY);Client.sin_addr.s_addr=inet_addr(RemoteIp);//這指示遠程IP地址●定義TFTP首部緩沖區TRecvBuff;//接收的數據緩沖區TLocalBuff;//本地數據緩沖區●接收數據,定義數據塊大小為512字節(因為TFTP的數據塊最大為512字節):intalen=sizeof(Client);recvfrom(sock,(char*)&RecvBuff,512,0,(structsockaddr*)&Client,&alen);FILE*fp;fp=fopen("xiaoyang.txt","rb");//服務器要操作的文件xiaoyang.txt,打開這個文件,假定xiaoyang.txt,已在服務器的列表中charout[MAXLEN];unsignedlongn(fp);//這個函數作用獲取文件xiaoyang.txt的長度●保持服務器一直運行while(1){fd_setrset;SOCKETn;FD_ZERO(&rset);FD_SET(s,&rset);n=select((int)s+1,&rset,0,0,0);if(FD_ISSET(s,&rset))//如果接受到客戶端的數據執行下面操作{//::Sleep(60);res=recvfrom(s,recvBuf,269,0,(SOCKADDR*)&server,&len);}Recvfrom//函數的作用是基于UDP的接收數據的函數。接收到得數據存放到recvBuf中if(res==0){printf("Recvfailed.\n"); return1;}parseReq(recvBuf,Q);//這個函數作用是放過本次請求。printf("操作碼:%d\n",nCode=recvBuf[1]);●從本次的請求數據包中讀取操作碼,這里僅寫出了服務端對讀請求和確認包做出的反應。switch(nCode){case1://如果操作碼為1,則為客戶端要求獲取文件。A.opCode=6;A.blockNumber=0;//makeACK(A,ackBuf,n);//memcpy(ackBuf+2,"blksize=95",strlen("blksize=95"));ackBuf[0]=0x00;ackBuf[1]=0x06;ackBuf[2]=0x62;ackBuf[3]=0x6c;ackBuf[4]=0x6b;ackBuf[5]=0x73;ackBuf[6]=0x69;ackBuf[7]=0x7a;ackBuf[8]=0x65;ackBuf[9]=0x00;ackBuf[10]=0x31;ackBuf[11]=0x30;ackBuf[12]=0x32;ackBuf[13]=0x34;ackBuf[14]=0x00;ackBuf[15]=0x74;ackBuf[16]=0x73;ackBuf[17]=0x69;ackBuf[18]=0x7a;ackBuf[19]=0x65;ackBuf[20]=0x00;ackBuf[21]=0x33;ackBuf[22]=0x35;ackBuf[23]=0x30;ackBuf[24]=0x32;ackBuf[25]=0x37;ackBuf[26]=0x30;ackBuf[27]=0x32;ackBuf[28]=0x00;res=sendto(s,ackBuf,29,0,(SOCKADDR*)&server,sizeof(SOCKADDR));/基于UDP的發送數據函數。將ackBuf中保存的數據發送給客戶端/break;case2://如果操作碼為2,則為客戶端要求寫文件。case3://如果操作碼為3,則數據包為要寫入活著要讀取的文件內容。case4://如果操作碼為4,則為客戶端的確認幀。parseACK(recvBuf,A);if(A.blockNumber==i){if(i!=0)i=A.blockNumber;data.blockNumber=++i; if(nCurSize>n){nCurSize=0;i=0;bufsize=MAXLEN;break;}memset(sendBuf,0x00,MAXLEN+4);memset(out,0x00,MAXLEN);//Memset函數功能是將out所指向的一塊內存中的每個字節的內容全部設置為0x00,塊的大小MAXLEN.fseek(fp,nCurSize,SEEK_SET);//fseek函數的功能是重定位流上的文件指針longoffset,intfromwhere);

if(n<=MAXLEN){bufsize=n;}fread(out,1,bufsize,fp);//fread函數功memcpy(data.data,out,1024);//memcpy函數功能:由out所指內存區域復制1024個字節到data所指內存區域makeDATA(data,sendBuf,bufsize+4,bufsize);res=sendto(s,sendBuf,bufsize+4,0,(SOCKADDR*)&server,len);基于UDP的發送數據函數,if(res==0){printf("Sendfailed.\n");}nCurSize+=MAXLEN;//printf("\nPackets:%dSendDataLen:%dTotalLen:%d\n",i,res,nCurSize);}break;case5://如果操作碼為5,則數據包有錯誤,提示服務器重新發送數據包。}●關閉服務端fclose(fp);//關閉剛才打開的xiaoyang.txt文件。closesocket(s);//關閉套接字s。WSACleanup();//釋放套接字資源。return0;到這里一個簡單的基于TFTP協議的網絡傳輸軟件已基本形成。4.3VC6.0環境軟件窗口的創建一個軟件的好壞,在于其功能是否強大,可視化界面是否簡介方便用戶使用,即窗口得好壞。在VC6.0中窗口創建還是比較方便的,需要通過六個步驟:設計一個窗口類、注冊一個窗口類、創建窗口、顯示及更新窗口、消息處理、編寫窗口過程函數。Windows已經定義好了一個窗口所應具有的基本屬性,只需要像考試時做填空題一樣,將需要填充的部分填寫完整,一種窗口就設計好了。在Windows中,窗口的特征就是由WNDCLASS結構體來定義的,設計完窗口類(WNDCLASS)后,需要調用RegisterClass函數對其進行注冊,注冊成功后,才可以創建該類型的窗口。ATOMRegisterClass(CONSTWNDCLASS*lpWndClass);該函數只有一個參數,即設計的窗口類對象的指針。設計好窗口類并且將其成功注冊之后,就可以用CreateWindow函數產生這種類型的窗口了。窗口創建之后,要讓它顯示出來,調用函數ShowWindow()來顯示窗口,在創建窗口、顯示窗口、更新窗口后,需要編寫一個消息循環,不斷地從消息隊列中取出消息,并進行響應。要從消息隊列中取出消息,我們需要調用GetMessage()函數,在完成上述步驟后,剩下的工作就是編寫一個窗口過程函數,用于處理發送給窗口的消息。一個Windows應用程序的主要代碼部分就集中在窗口過程函數中。結合所設計的軟件所需的要求,分別對上述步驟里的結構體以及函數進行賦值和編寫合適的窗口過程函數就可以得到下面得一個窗口: 軟件的窗口就這樣創建出來了,標題欄指出了軟件名稱“TFTP服務器”和本地的主機地址“00”第五章利用軟件進行一次文件網絡傳輸的描

溫馨提示

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

評論

0/150

提交評論