




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、局域網(wǎng)文件傳輸系統(tǒng)摘要 隨著國內(nèi)外各公司企業(yè)的發(fā)展壯大和這些企業(yè)和公司在辦公中更加頻繁的使用網(wǎng) 絡(luò)作為公司信息交流的渠道, 局域網(wǎng)絡(luò)在人們的工作和生活中得到了充足的發(fā)展。 本課 題旨在培養(yǎng)學(xué)生利用現(xiàn)有技術(shù)進(jìn)行實(shí)際動(dòng)手的能力, 并使得學(xué)生能夠深入了解局域網(wǎng)在 文件傳輸方面的應(yīng)用。局域網(wǎng)小到網(wǎng)內(nèi)只有兩臺(tái)PC 機(jī),大到一個(gè)企業(yè)的內(nèi)部網(wǎng)絡(luò),它們最主要的功能在于交流和傳輸文件,并且安全性高、速度快、準(zhǔn)確性高。鑒于局域網(wǎng)有如上優(yōu)點(diǎn),開發(fā)一個(gè)方便快捷的局域網(wǎng)文件傳輸系統(tǒng)是很有意義的, 它在文件傳輸方面的高效準(zhǔn)確將會(huì)提高企業(yè)的辦事效率, 為企業(yè)節(jié)省開支, 為家庭用戶 提供方便。關(guān)鍵詞 TCP/IP 協(xié)議; C
2、/S 結(jié)構(gòu); Windows Sockets 編程; VC+LAN File Transfer SystemABSTRACTNowadays, along with the domestic and foreign companies more and more frequently use the network as a channel for the exchange of information after their companies have full development, the local area network (LAN) has been fully develop
3、ed in people' s life andwork. This paper aims at training students to use existing technology to practical use, and makes the students to understand the application of LAN in the file transfer. LAN in scale vary from a network within only two PC to an enterprise 's internal network, their ma
4、in function is communication and file transfer, and with the advantage of high safty, high speed and high accuracy.In view of LAN 's these advantages, it is of great significance to develop a convenient and efficient LAN file transfer system. For its 'high speed and accuracy, it will improve
5、 enterprises'work efficiency and provide convenient for families.Keywords The TCP/IP Protocol; C/S Structure; Windows Sockets Programming; VC+目錄摘要 1Abstract 2第 1 章 緒論 51.1 選題背景 51.2國內(nèi)外研究現(xiàn)狀 51.3課題研究的意義 51.4論文研究內(nèi)容 5第 2 章 理論知識(shí) 72.1 TCP/IP 協(xié)議 72.1.1 網(wǎng)絡(luò)接口層 72.1.2 網(wǎng)絡(luò)層 72.1.3 傳輸層 82.1.4 應(yīng)用層 82.2 C/S 架構(gòu)
6、 82.2.1 C/S 架構(gòu)的概念 82.2.2 C/S 架構(gòu)的具體操作步驟 92.3 VC可視化編程環(huán)境92.4 Windows Socket 編程知識(shí) 1.02.4.1 Windows Socket 的發(fā)展 1.02.4.2 Windows Sockets 的分類 1.02.4.3 Windows Sockets API 1.02.5 本章小結(jié) 1.1軟件設(shè)計(jì)局域網(wǎng)文件傳輸系統(tǒng)程序設(shè)計(jì)局域網(wǎng)文件傳輸系統(tǒng)設(shè)計(jì)步驟設(shè)計(jì)客戶端所用到的函數(shù)設(shè)計(jì)服務(wù)器所用到的函數(shù)消息與消息函數(shù)功能按鈕與函數(shù)的對(duì)應(yīng)關(guān)系軟件測試程序的安裝與運(yùn)行在局域網(wǎng)內(nèi)傳輸文件測試4.2.1 設(shè)置服務(wù)器4.2.2 設(shè)置客戶機(jī)并傳輸文件
7、本章小結(jié)結(jié)論參考文獻(xiàn).......3.1.第3章 第4章第5章第 1 章 緒論1.1 選題背景隨著國內(nèi)外各公司企業(yè)的發(fā)展壯大和這些企業(yè)和公司在辦公中更加頻繁的使用網(wǎng) 絡(luò)作為公司信息交流的渠道, 局域網(wǎng)絡(luò)在人們的工作和生活中得到了廣泛的發(fā)展。本課 題旨在培養(yǎng)學(xué)生利用現(xiàn)有技術(shù)進(jìn)行實(shí)際動(dòng)手的能力, 并使得學(xué)生能夠深入了解局域網(wǎng)在 文件傳輸方面的應(yīng)用。局域網(wǎng)小到網(wǎng)內(nèi)只有兩臺(tái) PC 機(jī),大到一個(gè)企業(yè)的內(nèi)部網(wǎng)絡(luò),它 們最主要的功能在于交流和傳輸文件,并且安
8、全性高、速度快、準(zhǔn)確性高。鑒于局域網(wǎng)有如上有點(diǎn),開發(fā)一個(gè)方便快捷的局域網(wǎng)文件傳輸系統(tǒng)是很有意義的, 它在文件傳輸方面的高效準(zhǔn)確將會(huì)提高企業(yè)的辦事效率, 為企業(yè)節(jié)省開支, 為家庭提供 方便。 本論文所設(shè)計(jì)的局域網(wǎng)文件傳輸系統(tǒng)通過局域網(wǎng)內(nèi)用戶的主機(jī)名、IP 地址和工作組的名稱確定了需要傳輸文件的雙方,進(jìn)而以 C/S 模式通過 TCP/IP 協(xié)議實(shí)現(xiàn)雙方文件 的傳輸功能。1.2 國內(nèi)外研究現(xiàn)狀大型局域網(wǎng)廣泛存在于國內(nèi)外大型企業(yè)中, 而大部分企業(yè)還是通過 Internet 等等外 網(wǎng)或者 U 盤等硬件來傳輸文件, 只有少數(shù)企業(yè)針對(duì)該企業(yè)的特點(diǎn)設(shè)計(jì)了自己的文件傳輸 系統(tǒng),總的來說在企業(yè)內(nèi)部發(fā)展局域網(wǎng)文件
9、傳輸系統(tǒng)還有很大的發(fā)展空間。從 1969 年美國國防部高級(jí)研究計(jì)劃管理局 ( ARPA - - Advanced Research Projects Agency )建立了一個(gè)命名為 ARPAnet 的網(wǎng)絡(luò)開始到今日,網(wǎng)絡(luò)發(fā)展已走過足足 50 年 的時(shí)間,在這漫長的時(shí)間里,局域網(wǎng)文件傳輸系統(tǒng)也得到了相應(yīng)的發(fā)展,現(xiàn)在正處于 高速發(fā)展階段,這從現(xiàn)今市面上流行的騰訊 QQ、飛鴿傳書等可見一斑。可以想象,在 不久的將來, 以內(nèi)部網(wǎng)絡(luò)為中心的資源共享系統(tǒng)將在全世界的信息流動(dòng)中占有到舉足輕 重的地位。1.3 課題研究的意義本課題使學(xué)生了解局域網(wǎng)在實(shí)際工作和生活中的應(yīng)用, 通過讓學(xué)生自己動(dòng)手開發(fā)比 較簡單局
10、域網(wǎng)文件傳輸系統(tǒng)來強(qiáng)化學(xué)生的理論知識(shí),培養(yǎng)學(xué)生的實(shí)際動(dòng)手能力。另外, 本課題也使得學(xué)生對(duì)軟件開發(fā)有了一個(gè)感性的認(rèn)識(shí), 為我們在日后的工作中進(jìn)一步設(shè)計(jì) 更復(fù)雜的系統(tǒng)打下了基礎(chǔ)。1.4 論文研究內(nèi)容用 Microsoft visual C+ 6.0 軟件開發(fā)一個(gè)以 C/S 模式通過 TCP/IP 協(xié)議實(shí)現(xiàn)點(diǎn)到點(diǎn)文件傳輸?shù)暮唵蔚木钟蚓W(wǎng)文件傳輸系統(tǒng)軟件。該軟件傳輸?shù)奈募袷桨ㄎ谋疚臋n(txt)、圖片(JPG和壓縮包(.rar)等等。該傳輸系統(tǒng)運(yùn)行的操作系統(tǒng)平臺(tái)為Windows XP或者 Windows 7 ,在傳輸文件之前,需要將多臺(tái) (>=2 臺(tái))電腦通過路由器或者交換機(jī)用網(wǎng) 線連接在一起,
11、為各臺(tái) PC機(jī)設(shè)置好IP并建立一個(gè)工作組。在這些電腦上分別安裝局域網(wǎng)文件傳輸系統(tǒng)并運(yùn)行,實(shí)現(xiàn)文件傳輸?shù)木唧w步驟如 下:1、在工作組內(nèi)的所有PC機(jī)上運(yùn)行該軟件,并將其中一臺(tái)PC機(jī)設(shè)置為服務(wù)器2、在設(shè)置為服務(wù)器的PC機(jī)上打開要發(fā)送的文件3、 輸入要接受文件的PC機(jī)的IP地址號(hào)、端口號(hào),并連接服務(wù)器4、發(fā)送文件。第2章 理論知識(shí)包括 TCP/IP 協(xié)議, C/S這一章介紹開發(fā)局域網(wǎng)文件傳輸系統(tǒng)所涉及到的理論知識(shí), 架構(gòu), VC 可視化編程環(huán)境, Windows Socket 編程。2.1 TCP/IP 協(xié)議TCP/IP 是 Transmission Control Protocol/Internet
12、 Protocol 輸控制協(xié)議 / 因特網(wǎng)互聯(lián)協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議,這個(gè)協(xié)議是 議、 Internet 國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),簡單地說,就是由網(wǎng)絡(luò)層的的簡寫,中文譯名為傳 Internet 最基本的協(xié) IP 協(xié)議和傳輸層的 TCP協(xié)議組成的。 TCP/IP 定義了電子設(shè)備(比如計(jì)算機(jī))如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。 TCP/IP 是一個(gè)四層的分層體系結(jié)構(gòu)。高層為傳輸控制協(xié)議, 它負(fù)責(zé)聚集信息或把文件拆分成更小的包。 低層是網(wǎng)際協(xié)議, 它處理每個(gè)包的地址部分, 使這些包正確的到達(dá)目的地。從協(xié)議分層模型方面來講, TCP/IP 由四個(gè)層次組成:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸 層、應(yīng)用
13、層。 具體介紹如下2.1.1 網(wǎng)絡(luò)接口層物理層定義物理介質(zhì)的各種特性: 1、機(jī)械特性; 2、電子特性; 3 、功能特性; 4 、 規(guī)程特性。數(shù)據(jù)鏈路層是負(fù)責(zé)接收 IP 數(shù)據(jù)報(bào)并通過網(wǎng)絡(luò)發(fā)送之,或者從網(wǎng)絡(luò)上接收物理幀, 抽出 IP 數(shù)據(jù)報(bào),交給 IP 層。常見的接口層協(xié)議有: Ethernet 802.3 、 Token Ring 802.5 、X.25、Frame relay 、 HDLC、PPP ATM 等。2.1.2 網(wǎng)絡(luò)層網(wǎng)絡(luò)層負(fù)責(zé)相鄰計(jì)算機(jī)之間的通信。其功能包括三方面。( 1)、處理來自傳輸層的分組發(fā)送請(qǐng)求,收到請(qǐng)求后,將分組裝入IP 數(shù)據(jù)報(bào),填充報(bào)頭,選擇去往信宿機(jī)的路徑,然后將數(shù)據(jù)
14、報(bào)發(fā)往適當(dāng)?shù)木W(wǎng)絡(luò)接口。( 2)、處理輸入數(shù)據(jù)報(bào):首先檢查其合法性,然后進(jìn)行尋徑-假如該數(shù)據(jù)報(bào)已到達(dá)信宿機(jī),則去掉報(bào)頭,將剩下部分交給適當(dāng)?shù)膫鬏攨f(xié)議;假如該數(shù)據(jù)報(bào)尚未到達(dá)信宿, 則轉(zhuǎn)發(fā)該數(shù)據(jù)報(bào)。3)、處理路徑、流控、擁塞等問題。2.1.3 傳輸層傳輸層負(fù)責(zé)提供應(yīng)用程序間的通信。其功能包括:一、格式化信息流;二、提供可 靠傳輸。為實(shí)現(xiàn)后者,傳輸層協(xié)議規(guī)定接收端必須發(fā)回確認(rèn),并且假如分組丟失,必須 重新發(fā)送。傳輸層協(xié)議主要是:傳輸控制協(xié)議 TCP(Transmission Control Protocol) 和用戶數(shù)據(jù) 報(bào)協(xié)議 UDP(User Datagram protocol) 。2.1.4 應(yīng)
15、用層應(yīng)用層負(fù)責(zé)向用戶提供一組常用的應(yīng)用程序,比如電子郵件、文件傳輸訪問、遠(yuǎn)程 登錄等。遠(yuǎn)程登錄 TELNET 使用 TELNET 協(xié)議提供在網(wǎng)絡(luò)其它主機(jī)上注冊的接口。 TELNET會(huì)話提供了基于字符的虛擬終端。文件傳輸訪問FTP使用FTP協(xié)議來提供網(wǎng)絡(luò)內(nèi)機(jī)器間的文件拷貝功能。應(yīng)用層一般是面向用戶的服務(wù)。如 FTP、TELNET、DNS、SMTP、POP3。2.2 C/S 架構(gòu)2.2.1 C/S 架構(gòu)的概念C/S即Client/Server結(jié)構(gòu),是大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系 結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到 Client 端和 Server 端來實(shí)
16、現(xiàn),降低了系統(tǒng)的通訊開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是 Client/Server 形式 的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的 Web 應(yīng)用發(fā)展, Web 和 Client/Server 應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此, 內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng), 通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可 以擴(kuò)展出新的應(yīng)用系統(tǒng)。這也就是目前應(yīng)用系統(tǒng)的發(fā)展方向。傳統(tǒng)的 C/S 體系結(jié)構(gòu)雖然采用的是開放模式, 但這只是系統(tǒng)開發(fā)一級(jí)的開放性, 在 特定的應(yīng)用中無論是 Client 端還是 Server 端都還需要特定的軟件支持。由于沒能提供 用戶真正期望的開放環(huán)境
17、, C/S 結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本 的軟件,加之產(chǎn)品的更新?lián)Q代十分快, 已經(jīng)很難適應(yīng)百臺(tái)電腦以上局域網(wǎng)用戶同時(shí)使用。 而且代價(jià)高,效率低。C/S的優(yōu)點(diǎn)是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對(duì)應(yīng)的優(yōu)點(diǎn)就是客戶端響應(yīng)速度快。缺點(diǎn)主要有以下幾個(gè):1、只適用于局域網(wǎng)。而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動(dòng)辦公和分布式辦公越來越普 及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時(shí)要對(duì)系統(tǒng) 進(jìn)行專門的設(shè)計(jì)來處理分布式的數(shù)據(jù)。2、客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺(tái) 電腦出問題,如病毒、硬件損壞,都需要
18、進(jìn)行安裝或維護(hù)。特別是有很多分部或?qū)Yu店 的情況,不是工作量的問題,而是路程的問題。還有,系統(tǒng)軟件升級(jí)時(shí),每一臺(tái)客戶機(jī) 需要重新安裝,其維護(hù)和升級(jí)成本非常高。3、對(duì)客戶端的操作系統(tǒng)一般也會(huì)有限制2.2.2 C/S 架構(gòu)的具體操作步驟客戶/ 服務(wù)器模式在操作過程中采取的是主動(dòng)請(qǐng)求方式。1、服務(wù)器方的具體操作步驟如下:(1)、首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)求提供相應(yīng)服務(wù)。(2)、打開一個(gè)通信通道并告知本地主機(jī),它愿意在某一端口上接收客戶請(qǐng)求。( 3 )、等待客戶請(qǐng)求到達(dá)該端口。(4)、接收到重復(fù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。接收到并發(fā)服務(wù)請(qǐng)求,要 激活一新進(jìn)程來處理這個(gè)客戶請(qǐng)求。新進(jìn)程處理此客戶
19、請(qǐng)求,并不需要對(duì)其他請(qǐng)求做出 應(yīng)答。服務(wù)完成后,關(guān)閉此進(jìn)程與客戶的通信鏈接,并終止該進(jìn)程。( 5 )、返回第二步,等待另一客戶請(qǐng)求。( 6 )、關(guān)閉服務(wù)器。2 、 .客戶方的主要操作步驟如下:(1)、打開一通信通道,并鏈接到服務(wù)器所在主機(jī)指定端口。(2)、向服務(wù)器發(fā)服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求。(3)、請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。2.3 VC 可視化編程環(huán)境在 Microsoft Visual C+ 6.0 開發(fā)環(huán)境 Developer Studio 是在 Windows 98/2000/XP/7 環(huán)境下運(yùn)行的一套集成工具,由文本編輯、資源編輯器、項(xiàng)目建立工 具、優(yōu)化編輯器、增
20、量連接器、源代碼瀏覽器、集成調(diào)試器等組成。Visual C+ 6.0 的軟、硬件配置需求如下:1、 操作系統(tǒng): Windows 98 、 Windows2000 、 Windows XP 或者 Windows 7及更高版本。2、內(nèi)存:根據(jù)不同操作系統(tǒng)設(shè)定,最好在 128M 以上。3、硬盤:最小需要 300MB 以上空間。4、 CD-ROM 驅(qū)動(dòng)器(用于聯(lián)機(jī)信息 )。2.4 WINDOWS SOCKET 編程知識(shí)2.4.1 WINDOWS SOCKET 的發(fā)展在 Intel 、Microsoft 、Sun、SDI、Informix 、 Novell 等公司的大力支持下,Win dows Sock
21、et (以下簡稱 Win Sock)從1991年的1.0版發(fā)展到1996年的2.2版。如 今 WinSock 已經(jīng)成為 Windows 網(wǎng)絡(luò)編程的標(biāo)準(zhǔn)。2.4.2 W INDOWS SOCKETS 的分類Win Sock編程分為同步(Sy nc)和異步(Async)。同步方式指的是發(fā)送方不等接收 方響應(yīng),便接著發(fā)下一個(gè)數(shù)據(jù)包得通信方式。同步方式邏輯清晰,編程專注于應(yīng)用, 在搶先式的多任務(wù)操作系統(tǒng)中 (Win NT、Win 2000),采用多線程方式效率基本達(dá)到異 步方式的水平。而異步指發(fā)送方發(fā)出數(shù)據(jù)以后,等收到接收方發(fā)回的響應(yīng), 才發(fā)出下一 個(gè)數(shù)據(jù)包的通信方式。阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡(luò)
22、調(diào)用時(shí), 直到成功才返回, 否則一直阻塞在此 網(wǎng)路調(diào)用上,比如調(diào)用 recv() 函數(shù)讀取網(wǎng)路緩沖區(qū)中的數(shù)據(jù),如果沒有數(shù)據(jù)到達(dá),將一 直用 recv() 這個(gè)函數(shù)調(diào)用上,知道讀到一些數(shù)據(jù),此函數(shù)才返回;而非阻塞套接字是指 此套接字的網(wǎng)絡(luò)調(diào)用時(shí),不管是否執(zhí)行成功,都立即返回。比如調(diào)用 recv() 函數(shù)讀取網(wǎng) 絡(luò)緩沖區(qū)中的數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回,而不會(huì)一直掛在此函數(shù)調(diào)用上。在 實(shí)際 Windows 網(wǎng)絡(luò)通信軟件中,異步非阻塞套接字是用的最多的。平常所用的 C/S 結(jié) 構(gòu)軟件用到的就是異步非阻塞模式的。2.4.3 W INDOWS SOCKETS APIWindows提供了一系列的 AP
23、I來支持Sockets,主要包括兩類,一類是 berkeley類 型的函數(shù),另一類是已經(jīng)認(rèn)可的作為 Windows Sockets 2 的一部分的 Windows 特殊的 擴(kuò)展函數(shù)。下面對(duì)一些常用的 Windows Sockets API 函數(shù)進(jìn)行簡單說明:1 、 socket() :創(chuàng)建一個(gè) Socket。所有的通信在建立連接之前都要?jiǎng)?chuàng)建一個(gè)Socket,該函數(shù)的功能與文件操作中的fopen 類似。2 、 bind() :為創(chuàng)建的 Socket 指定通訊對(duì)象。成功建立 Socket 之后,就應(yīng)該選定通信的對(duì)象。首先是自己的程序需要與網(wǎng)絡(luò)上 的哪臺(tái)計(jì)算機(jī)通話;其次,在多任務(wù)的系統(tǒng)下,該臺(tái)計(jì)算機(jī)
24、可能會(huì)有幾個(gè)程序在工作, 必須指出與那個(gè)程序通信。 前者可以通過 Intenet 的網(wǎng)絡(luò) IP 地址來確定, 而后者就需要 指出端口號(hào), 用端口號(hào)來表示同一臺(tái)計(jì)算機(jī)上不同的應(yīng)用程序, 可以從 0-65536 之間任 選, 不同功能的應(yīng)用程序使用不同的端口號(hào),這樣一臺(tái)計(jì)算機(jī)上可以有幾個(gè)程序同時(shí)使用一個(gè) IP 地址而互不干擾。3、 listen() :設(shè)置等待連接狀態(tài)。對(duì)于服務(wù)器的程序,當(dāng)申請(qǐng)到 Socket,并制定通信對(duì)象為INADDR-ANY之后,就 應(yīng)該等待一個(gè)客戶機(jī)的程序來要求連接。而 listen() 就是把一個(gè) Socket 設(shè)置這種狀態(tài)的 函數(shù)。4、accept() :接收請(qǐng)求連接。
25、當(dāng)沒有連接請(qǐng)求時(shí),對(duì)于阻塞方式,就進(jìn)入等待狀態(tài),直至有一個(gè)請(qǐng)求到達(dá)為止。5、connect() :主動(dòng)提出請(qǐng)求連接。以上的 bind() 、listen() 、和 accept() 函數(shù)一般都用于服務(wù)程序,屬于被動(dòng)等待的函 數(shù);對(duì)于客戶端,要主動(dòng)提出連接請(qǐng)求,應(yīng)使用 connect() 函數(shù)。6、sent()/recv(): 發(fā)送、接受數(shù)據(jù)。7、connect() :直接通信。8、closesocket(SOCKET s):通信結(jié)束,關(guān)閉指定的 Socket。2.5 本章小結(jié)這一章所介紹的 TCP/IP 協(xié)議、編程的相關(guān)知識(shí)是下一章所展示的軟件的編寫基礎(chǔ), 只有在這一章的理論指導(dǎo)下, 軟件的編
26、寫才能合乎實(shí)際, 才能最終實(shí)現(xiàn)在局域網(wǎng)內(nèi)傳輸 文件。第3章軟件設(shè)計(jì)在第三章中展示了用局域網(wǎng)文件傳輸系統(tǒng),并成功傳輸了一個(gè)文件,這一章將對(duì)程 序內(nèi)部的細(xì)節(jié)予以介紹。該局域網(wǎng)文件傳輸系統(tǒng)使用VC+為編程語言,編程軟件為Microsoft Visual C+,使用對(duì)話框?yàn)樵撥浖木幊炭蚣?,其中用到了C+標(biāo)準(zhǔn)庫函數(shù)和MFC類庫,在并將其轉(zhuǎn)化為自己所需要的功能函數(shù)。客戶機(jī)和服務(wù)器的信息流如圖4-1所示:3.1局域網(wǎng)文件傳輸系統(tǒng)程序設(shè)計(jì)局域網(wǎng)文件傳輸系統(tǒng)的主要功能是建立與服務(wù)器的連接,向服務(wù)器發(fā)送數(shù)據(jù),并且能夠接收由服務(wù)器傳送而來的數(shù)據(jù)。局域網(wǎng)文件傳輸系統(tǒng)如圖3-2所示:闋 L inFil-Ti,in 十
27、-1局域闞文件播輸狂地址:| 192 ? 163 . 0:I端口號(hào):; 阿爭要傳輸?shù)奈募窂紺; UsarsgaQwaiDaskt opFil«打開文件 |設(shè)置威服務(wù)器|祐輸文件|確走取消I3.2局域網(wǎng)文件傳輸系統(tǒng)設(shè)計(jì)步驟(1)創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,在對(duì)話框中添加IP地址、Edit Box、Progress Bar等控件,如圖3-3所示:09 L -iiFikTi iiv.-frer局域網(wǎng)文件鶴輸if 地址:i:端口號(hào):I需要鶴輸?shù)奈募窂剑篒打開文件I設(shè)置感朋勢器傳輸文件I確定I取消I話框?yàn)閷?duì)話框中的控件命名或關(guān)聯(lián)數(shù)據(jù)。如圖3-4所示:(3)在對(duì)話框類的頭文件中引用win
28、sock2.h頭文件,并導(dǎo)入 ws2_32.lib 庫文件。#include ” winsock2.h ”#pragma comment(lib, ” ws2_32.lib ” )(4)在應(yīng)用程序的Ini tI nsta nee方法中初始化逃接字。WSADATA wsd;WSAStartup(MAKEWORD(2,2), &wsd);(5)在對(duì)話框的OnitDialog 方法中創(chuàng)建套接字。M_Clie nt=socket ( AF_INET,SOCK_STREAM,0;(6)在對(duì)話框類中添加成員函數(shù)CStri ngm_FileName; /傳送的文件名稱BOOLm_lsReveived
29、; /是否接收數(shù)據(jù)CStringm_ReceiveFile; /接收的文件名稱DWORDm_FileSize; /接收的文件大小DWORDm_FileLen ; /接收的文件長度CServerSocket* m_pServerSock; /接收文件套接字CServerSocket* m_ServerSock;CClientSocket* m_pSendSock; /發(fā)送文件套接字CFilem_File; /保存接收的文件BOOLm_Send; /是否開始發(fā)送數(shù)據(jù)BOOLm_SendNext; /是否繼續(xù)發(fā)送數(shù)據(jù)DWORDm_SendNum; /記錄當(dāng)前發(fā)送的次數(shù)CFilem_SendFile;
30、 /發(fā)送的文件DWORDm_SendLen; /記錄已經(jīng)發(fā)送的文件長度DWORDm_SendFileLen; /發(fā)送文件的長度CStringm_IP; /本機(jī) IPBOOLm_Received; /判斷是否接收到對(duì)方的回應(yīng)信息BOOLm_SendFinished;/發(fā)送是否完成intm_Count;(7)向?qū)υ捒蝾愔刑砑?AcceptConnection 方法,用于接受客戶端套接字的連接Void LANFileTransfer:AcceptConnect()M_serverSock->Close();M_pServerSock->Accept(*m_ServerSock);(8)處
31、理”設(shè)置成服務(wù)器”按鈕的單擊事件,創(chuàng)建服務(wù)器,并設(shè)置設(shè)置套接字接收數(shù)據(jù)時(shí) 觸發(fā)的消息。Void CLanFileTransfer: OnSetServer()Sockaddr_in serveraddr;UpdateData(TRUE);Serveraddr.sin_family=AF_INET;Serveraddr.sin_port=htons(m_port);Serveraddr.sin_addr.S_un.S_addr=inet_addr(m_IP);If(connect(m_client,(Sockaddr*)&serveraddr,sinzeof()serveraddr)!=
32、0)MeesageBox(“ connectFail! ” )Return;ElseMessageBox(“ Connected! ”);WSSAAsyncSelect(m_client,m_hWnd,1000,FD_READ);CString str,Info;m_path.GetWindowText(str);info.Format( “%s %s ” ,str, ”It 's allowed to Transfer file InLanFile! ” );int i=send(m_Client,Info.GetBuffer(0),info.GetLength(),0);(9) 處
33、理“發(fā)送”按鈕的單擊事件,向服務(wù)器發(fā)送數(shù)據(jù)。Void CLanFileTransfer: void CTransFileDlg:SendFileData()m_Send=TRUE;m_SendNext = TRUE;m_Received = TRUE;char data100;memset(data,0,100); m_SendNum +=1;獲得對(duì)方的應(yīng)答信息發(fā)送文件完成m_pSendSock->Receive(data,100); /CString rdata = data;if (m_SendLen>=m_SendFileLen) /m_Send = FALSE; m_Sen
34、dNext = FALSE; m_SendFile.Close(); m_pSendSock->Close(); m_pSendSock->Create(CLIENTPORT); MessageBox(" 發(fā)送完成 ");return;if (m_SendLen=0)&&(rdata=" 取消 "m_Send = FALSE; m_SendNext = FALSE; m_SendFile.Close(); m_pSendSock->Close(); m_pSendSock->Create(CLIENTPORT);M
35、essageBox(" 對(duì)方取消了文件接收 ");return;char* membuf= (char*)LocalAlloc(LMEM_FIXED,MAXSENDNUM); memset(membuf,0,MAXSENDNUM);int result;if(m_SendLen<m_SendFileLen)&&(m_SendLen+MAXSENDNUM)>m_SendFileLen) m_SendFile.ReadHuge(membuf,m_SendFileLen-m_SendLen);result = m_pSendSock->Send(
36、membuf, m_SendFileLen-m_SendLen);if (result =SOCKET_ERROR)m_Send = FALSE;m_SendNext = FALSE;m_SendFile.Close();m_pSendSock->Close();m_pSendSock->Create(CLIENTPORT);LocalFree(membuf);KillTimer(1);MessageBox(" 發(fā)送失敗 ");return ;m_SendLen =m_SendFileLen;elsem_SendFile.ReadHuge(membuf,MAXS
37、ENDNUM);result = m_pSendSock->Send(membuf, MAXSENDNUM);if (result =SOCKET_ERROR)m_Send = FALSE;m_SendNext = FALSE;m_SendFile.Close();m_pSendSock->Close();m_pSendSock->Create(CLIENTPORT);LocalFree(membuf);KillTimer(1);MessageBox(" 發(fā)送失敗 ");return;LocalFree(membuf);m_SendLen +=MAXSEN
38、DNUM;(10 )向?qū)υ捒蛑刑砑?ReceiveData 方法,用于接收從服務(wù)器傳來的數(shù)據(jù)。Void LANFileTransfer:ReceiveData()VOID* BUFFER = ( VOID*)L OCALALLOC(LMEM_FIXED,MAXSENDNUM+1);IF ( M_I SREVEIVED) / 第一次接收數(shù)據(jù) , 獲取接收的文件信息CHAR* FILEINFO = ( CHAR*)L OCALALLOC(LMEM_FIXED,MAX_PATH+4);MEMSE(TFILEINFO,0,MAX_PATH+4);INT LEN = M_SERVERSOCK->R
39、ECEIVE( FILEINFO,MAX_PATH+4); M_RECEIVEFILE .F ORMA(T"%S", FILEINFO); / 記錄接收的文件名 CHAR* TEMP = FILEINFO ;WHILE ( TEMP0 !=0)TEMP+=1;TEMP+=1;M_FILE SIZE = ATOI ( TEMP); / 記錄接收的文件大小LOCALFREE( FILEINFO);M_FILELEN = 0;CSTRING NAME= GETFILE NAME( M_RECEIVEFILE);IF (MESSAGBEOX(" 是否接收數(shù)據(jù) ?"
40、;," 提示 ",MB_YESNO)=IDYES) BROWSEINFBOI NFO;BI NFO. HWNODWNER= M_HWND;BI NFO. PIDLROOT = NULL;CHAR FILENAMEMAX_PATH;CHAR DIRMAX_PATH;MEMSE(TFILENAME,0,MAX_PATH);MEMSE(TDIR,0,MAX_PATH);BI NFO. PSZDISPLAYNAME = FILENAME;BI NFO. LPSZTITLE =" 請(qǐng)選擇目的路徑 "BI NFO. ULFLAGS =BIF_BROWSEINCLUD
41、EFILES|BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS|BIF_BROWS EFORCOMPUTER;BI NFO. LPARAM =NULL;BI NFO. LPFN =NULL;BI NFO. I I MAGE= 0;LPITEMIDLIST LPLIST = SHBROWSFEORFOLDER(&BI NFO);CSTRING FILEDIR;IF (SHGETPATHFROMIDLIST(LPLIST, DIR)M_FILE.A BORT();FILEDIR = DIR;FILEDIR += ""M_FILE .O
42、 PEN( FILEDIR+NAME,CFILE : MODCEREATE|CF ILE : MODWERITE);M_I SREVEIVED = FALSE; / 文件信息接收結(jié)束M_SERVERSOCK->SEND("1111",4);LOCALFREE( BUFFE)R;RETUR;NELSE / 拒絕接收文件M_FILE .C LOSE();LOCALFREE( BUFFE)R;M_SERVERSOCK->SEND(" 取消 ",4);M_SERVERSOCK->CLOSE();M_I SREVEIVED = TRUE;RETU
43、R;NELSEL OCALFREE( BUFFER);M_SERVERSOCK->SEND(" 取消 ",4);M_SERVERSOCK->CLOSE();M_I SREVEIVED = TRUE;RETUR;NELSE / 開始接收數(shù)據(jù) INT FILELEN = M _SERVESROCK->RECEIVE( BUFFER,MAXSENDNUM+1);IF ( FILELEN=SOCKET_ERROR) M_I SREVEIVED = TRUE;M_FILE .C LOSE();M_SERVERSOCK->CLOSE();LOCALFREE( B
44、UFFE)R;MESSAGBEOX(" 數(shù)據(jù)接收錯(cuò)誤 ");RETUR;NM_FILELEN += FILELEN;M_FILE .WRITEHUGE( BUFFER, FILELEN);LOCALFREE( BUFFE)R;IF ( M_FILE LEN>=M_FILESIZE) / 接收完成 M_FILE .C LOSE();M_SERVERSOCK->SEND(" 結(jié)束 ",4);M_I SREVEIVED = TRUE;M_SERVERSOCK->CLOSE();MESSAGBEOX(" 接收完成 ");EL
45、SEM_SERVERSOCK->SEND("1111",4);3.3 設(shè)計(jì)客戶端所用到的函數(shù)(1)FileOpen() 打開文件對(duì)話框, 用來獲取文件路徑, 并將其路徑顯示文件路徑編 輯框中。文件路徑編輯框中。( 2)OnFileTransfer() 通過設(shè)置好了的 IP 地址和端口號(hào), 該函數(shù)將實(shí)現(xiàn)文件從客戶 機(jī)到服務(wù)器文件的傳輸。( 3)InitAndConnet(HWND hwnd,UINT Port,CString strserver) 這個(gè)函數(shù)用來創(chuàng)建套 接字,通過界面上輸入的 IP 地址連接服務(wù)器。(4) Connect() 連接服務(wù)器函數(shù)。( 5 ) C
46、loseSocket 關(guān)閉一個(gè) Socket 。3.4 設(shè)計(jì)服務(wù)器所用到的函數(shù)(1)OnSetServer() 這個(gè)函數(shù)用來創(chuàng)建服務(wù)器線程,并偵聽局域網(wǎng)絡(luò)中接發(fā)文件的 請(qǐng)求。(2)Accept() 用來接受客戶機(jī)的連接請(qǐng)求。(3) Listen() 這個(gè)函數(shù)用來將 Sokket 設(shè)置成連接等待狀態(tài)。( 4 ) CloseSocket() 關(guān)閉一個(gè) Socket。3.5 消息與消息函數(shù)#define SER_MESSAGE WM_USER +100#define SER_MESSAGE WM_USER +101Afx_msg LRESULT OnServerMessage(WPARAM wPar
47、am,LParam lParam)Afx_msg LRESULT OnClientMessage(WPARAM wParam,LParam lParam)afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 這個(gè)函數(shù)是系統(tǒng)命令響 應(yīng)函數(shù)afx_msg void OnPaint(); 這個(gè)函數(shù)是系統(tǒng)界面構(gòu)建函數(shù)afx_msg HCURSOR OnQueryDragIcon(); 這個(gè)函數(shù)是消息隊(duì)列函數(shù)afx_msg void OnOpenFile(); 這個(gè)函數(shù)負(fù)責(zé)構(gòu)建文件打開對(duì)話框,并使傳輸文件進(jìn)入 準(zhǔn)備狀態(tài)afx_msg void OnSetServer(); 這個(gè)函數(shù)用來創(chuàng)建服務(wù)線程,偵聽網(wǎng)絡(luò)中的消息afx_msg void OnFileTransfer(); 這個(gè)函數(shù)用來傳輸文件3.6 功能按鈕與函數(shù)的對(duì)應(yīng)關(guān)系ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 殯儀服務(wù)與社區(qū)公益項(xiàng)目合同
- 車輛抵押權(quán)登記及抵押物抵押合同
- 鋼管混凝土拱橋泵送壓力專題研究
- 地磚施工工藝流程
- 【課件】+彈力+-2024-2025學(xué)年人教版(2024)物理八年級(jí)下冊+
- 智慧園林云平臺(tái)整體解決方案智慧公園整體解決方案
- 2024年電力負(fù)荷控制員(技師)職業(yè)鑒定考試題庫(含答案)
- 非金屬礦業(yè)數(shù)字化轉(zhuǎn)型
- 2024年高考語文備考之教考結(jié)合:新高考現(xiàn)代文閱讀Ⅱ題型
- 華為企業(yè)培訓(xùn)管理
- 珠寶行業(yè)市場競爭與監(jiān)管研究
- 會(huì)員經(jīng)理培訓(xùn)課件
- 高中政治必修三政治與法治考點(diǎn)專練選擇題100題含答案詳解
- 中城廉江上閣垌180MW農(nóng)光互補(bǔ)項(xiàng)目(升壓站)環(huán)境影響報(bào)告表
- 試卷模擬丨北師大版數(shù)學(xué)三年級(jí)下冊期末測試卷(二)(含答案)
- 文言文《活板》專項(xiàng)練習(xí)(含答案)
- 廣東2023屆珠海華潤銀行春季校園招聘考試參考題庫含答案詳解
- 35KV集電線路首次送電啟動(dòng)方案
- 汽車維修環(huán)保增效設(shè)備一覽表格
- 光纖跳線生產(chǎn)技術(shù)工藝流程
- 警用裝備智能管理中心(室)建設(shè)方案及技術(shù)參數(shù)
評(píng)論
0/150
提交評(píng)論