




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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)行實際動手的能力, 并使得學(xué)生能夠深入了解局域網(wǎng)在 文件傳輸方面的應(yīng)用。局域網(wǎng)小到網(wǎng)內(nèi)只有兩臺PC 機,大到一個企業(yè)的內(nèi)部網(wǎng)絡(luò),它們最主要的功能在于交流和傳輸文件,并且安全性高、速度快、準(zhǔn)確性高。鑒于局域網(wǎng)有如上優(yōu)點,開發(fā)一個方便快捷的局域網(wǎng)文件傳輸系統(tǒng)是很有意義的, 它在文件傳輸方面的高效準(zhǔn)確將會提高企業(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 章 理論知識 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 編程知識 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è)計局域網(wǎng)文件傳輸系統(tǒng)程序設(shè)計局域網(wǎng)文件傳輸系統(tǒng)設(shè)計步驟設(shè)計客戶端所用到的函數(shù)設(shè)計服務(wù)器所用到的函數(shù)消息與消息函數(shù)功能按鈕與函數(shù)的對應(yīng)關(guān)系軟件測試程序的安裝與運行在局域網(wǎng)內(nèi)傳輸文件測試4.2.1 設(shè)置服務(wù)器4.2.2 設(shè)置客戶機并傳輸文件
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)行實際動手的能力, 并使得學(xué)生能夠深入了解局域網(wǎng)在 文件傳輸方面的應(yīng)用。局域網(wǎng)小到網(wǎng)內(nèi)只有兩臺 PC 機,大到一個企業(yè)的內(nèi)部網(wǎng)絡(luò),它 們最主要的功能在于交流和傳輸文件,并且安
8、全性高、速度快、準(zhǔn)確性高。鑒于局域網(wǎng)有如上有點,開發(fā)一個方便快捷的局域網(wǎng)文件傳輸系統(tǒng)是很有意義的, 它在文件傳輸方面的高效準(zhǔn)確將會提高企業(yè)的辦事效率, 為企業(yè)節(jié)省開支, 為家庭提供 方便。 本論文所設(shè)計的局域網(wǎng)文件傳輸系統(tǒng)通過局域網(wǎng)內(nèi)用戶的主機名、IP 地址和工作組的名稱確定了需要傳輸文件的雙方,進(jìn)而以 C/S 模式通過 TCP/IP 協(xié)議實現(xiàn)雙方文件 的傳輸功能。1.2 國內(nèi)外研究現(xiàn)狀大型局域網(wǎng)廣泛存在于國內(nèi)外大型企業(yè)中, 而大部分企業(yè)還是通過 Internet 等等外 網(wǎng)或者 U 盤等硬件來傳輸文件, 只有少數(shù)企業(yè)針對該企業(yè)的特點設(shè)計了自己的文件傳輸 系統(tǒng),總的來說在企業(yè)內(nèi)部發(fā)展局域網(wǎng)文件
9、傳輸系統(tǒng)還有很大的發(fā)展空間。從 1969 年美國國防部高級研究計劃管理局 ( ARPA - - Advanced Research Projects Agency )建立了一個命名為 ARPAnet 的網(wǎng)絡(luò)開始到今日,網(wǎng)絡(luò)發(fā)展已走過足足 50 年 的時間,在這漫長的時間里,局域網(wǎng)文件傳輸系統(tǒng)也得到了相應(yīng)的發(fā)展,現(xiàn)在正處于 高速發(fā)展階段,這從現(xiàn)今市面上流行的騰訊 QQ、飛鴿傳書等可見一斑??梢韵胂?,在 不久的將來, 以內(nèi)部網(wǎng)絡(luò)為中心的資源共享系統(tǒng)將在全世界的信息流動中占有到舉足輕 重的地位。1.3 課題研究的意義本課題使學(xué)生了解局域網(wǎng)在實際工作和生活中的應(yīng)用, 通過讓學(xué)生自己動手開發(fā)比 較簡單局
10、域網(wǎng)文件傳輸系統(tǒng)來強化學(xué)生的理論知識,培養(yǎng)學(xué)生的實際動手能力。另外, 本課題也使得學(xué)生對軟件開發(fā)有了一個感性的認(rèn)識, 為我們在日后的工作中進(jìn)一步設(shè)計 更復(fù)雜的系統(tǒng)打下了基礎(chǔ)。1.4 論文研究內(nèi)容用 Microsoft visual C+ 6.0 軟件開發(fā)一個以 C/S 模式通過 TCP/IP 協(xié)議實現(xiàn)點到點文件傳輸?shù)暮唵蔚木钟蚓W(wǎng)文件傳輸系統(tǒng)軟件。該軟件傳輸?shù)奈募袷桨ㄎ谋疚臋n(txt)、圖片(JPG和壓縮包(.rar)等等。該傳輸系統(tǒng)運行的操作系統(tǒng)平臺為Windows XP或者 Windows 7 ,在傳輸文件之前,需要將多臺 (>=2 臺)電腦通過路由器或者交換機用網(wǎng) 線連接在一起,
11、為各臺 PC機設(shè)置好IP并建立一個工作組。在這些電腦上分別安裝局域網(wǎng)文件傳輸系統(tǒng)并運行,實現(xiàn)文件傳輸?shù)木唧w步驟如 下:1、在工作組內(nèi)的所有PC機上運行該軟件,并將其中一臺PC機設(shè)置為服務(wù)器2、在設(shè)置為服務(wù)器的PC機上打開要發(fā)送的文件3、 輸入要接受文件的PC機的IP地址號、端口號,并連接服務(wù)器4、發(fā)送文件。第2章 理論知識包括 TCP/IP 協(xié)議, C/S這一章介紹開發(fā)局域網(wǎng)文件傳輸系統(tǒng)所涉及到的理論知識, 架構(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é)議,這個協(xié)議是 議、 Internet 國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),簡單地說,就是由網(wǎng)絡(luò)層的的簡寫,中文譯名為傳 Internet 最基本的協(xié) IP 協(xié)議和傳輸層的 TCP協(xié)議組成的。 TCP/IP 定義了電子設(shè)備(比如計算機)如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。 TCP/IP 是一個四層的分層體系結(jié)構(gòu)。高層為傳輸控制協(xié)議, 它負(fù)責(zé)聚集信息或把文件拆分成更小的包。 低層是網(wǎng)際協(xié)議, 它處理每個包的地址部分, 使這些包正確的到達(dá)目的地。從協(xié)議分層模型方面來講, TCP/IP 由四個層次組成:網(wǎng)絡(luò)接口層、網(wǎng)絡(luò)層、傳輸 層、應(yīng)用
13、層。 具體介紹如下2.1.1 網(wǎng)絡(luò)接口層物理層定義物理介質(zhì)的各種特性: 1、機械特性; 2、電子特性; 3 、功能特性; 4 、 規(guī)程特性。數(shù)據(jù)鏈路層是負(fù)責(zé)接收 IP 數(shù)據(jù)報并通過網(wǎng)絡(luò)發(fā)送之,或者從網(wǎng)絡(luò)上接收物理幀, 抽出 IP 數(shù)據(jù)報,交給 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é)相鄰計算機之間的通信。其功能包括三方面。( 1)、處理來自傳輸層的分組發(fā)送請求,收到請求后,將分組裝入IP 數(shù)據(jù)報,填充報頭,選擇去往信宿機的路徑,然后將數(shù)據(jù)
14、報發(fā)往適當(dāng)?shù)木W(wǎng)絡(luò)接口。( 2)、處理輸入數(shù)據(jù)報:首先檢查其合法性,然后進(jìn)行尋徑-假如該數(shù)據(jù)報已到達(dá)信宿機,則去掉報頭,將剩下部分交給適當(dāng)?shù)膫鬏攨f(xié)議;假如該數(shù)據(jù)報尚未到達(dá)信宿, 則轉(zhuǎn)發(fā)該數(shù)據(jù)報。3)、處理路徑、流控、擁塞等問題。2.1.3 傳輸層傳輸層負(fù)責(zé)提供應(yīng)用程序間的通信。其功能包括:一、格式化信息流;二、提供可 靠傳輸。為實現(xiàn)后者,傳輸層協(xié)議規(guī)定接收端必須發(fā)回確認(rèn),并且假如分組丟失,必須 重新發(fā)送。傳輸層協(xié)議主要是:傳輸控制協(xié)議 TCP(Transmission Control Protocol) 和用戶數(shù)據(jù) 報協(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ò)其它主機上注冊的接口。 TELNET會話提供了基于字符的虛擬終端。文件傳輸訪問FTP使用FTP協(xié)議來提供網(wǎng)絡(luò)內(nèi)機器間的文件拷貝功能。應(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),是大家熟知的客戶機和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系 結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到 Client 端和 Server 端來實
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ā)一級的開放性, 在 特定的應(yīng)用中無論是 Client 端還是 Server 端都還需要特定的軟件支持。由于沒能提供 用戶真正期望的開放環(huán)境
17、, C/S 結(jié)構(gòu)的軟件需要針對不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本 的軟件,加之產(chǎn)品的更新?lián)Q代十分快, 已經(jīng)很難適應(yīng)百臺電腦以上局域網(wǎng)用戶同時使用。 而且代價高,效率低。C/S的優(yōu)點是能充分發(fā)揮客戶端PC的處理能力,很多工作可以在客戶端處理后再提交給服務(wù)器。對應(yīng)的優(yōu)點就是客戶端響應(yīng)速度快。缺點主要有以下幾個:1、只適用于局域網(wǎng)。而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動辦公和分布式辦公越來越普 及,這需要我們的系統(tǒng)具有擴(kuò)展性。這種方式遠(yuǎn)程訪問需要專門的技術(shù),同時要對系統(tǒng) 進(jìn)行專門的設(shè)計來處理分布式的數(shù)據(jù)。2、客戶端需要安裝專用的客戶端軟件。首先涉及到安裝的工作量,其次任何一臺 電腦出問題,如病毒、硬件損壞,都需要
18、進(jìn)行安裝或維護(hù)。特別是有很多分部或?qū)Yu店 的情況,不是工作量的問題,而是路程的問題。還有,系統(tǒng)軟件升級時,每一臺客戶機 需要重新安裝,其維護(hù)和升級成本非常高。3、對客戶端的操作系統(tǒng)一般也會有限制2.2.2 C/S 架構(gòu)的具體操作步驟客戶/ 服務(wù)器模式在操作過程中采取的是主動請求方式。1、服務(wù)器方的具體操作步驟如下:(1)、首先服務(wù)器方要先啟動,并根據(jù)請求提供相應(yīng)服務(wù)。(2)、打開一個通信通道并告知本地主機,它愿意在某一端口上接收客戶請求。( 3 )、等待客戶請求到達(dá)該端口。(4)、接收到重復(fù)請求,處理該請求并發(fā)送應(yīng)答信號。接收到并發(fā)服務(wù)請求,要 激活一新進(jìn)程來處理這個客戶請求。新進(jìn)程處理此客戶
19、請求,并不需要對其他請求做出 應(yīng)答。服務(wù)完成后,關(guān)閉此進(jìn)程與客戶的通信鏈接,并終止該進(jìn)程。( 5 )、返回第二步,等待另一客戶請求。( 6 )、關(guān)閉服務(wù)器。2 、 .客戶方的主要操作步驟如下:(1)、打開一通信通道,并鏈接到服務(wù)器所在主機指定端口。(2)、向服務(wù)器發(fā)服務(wù)請求報文,等待并接收應(yīng)答;繼續(xù)提出請求。(3)、請求結(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ō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ū)動器(用于聯(lián)機信息 )。2.4 WINDOWS SOCKET 編程知識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ā)下一個數(shù)據(jù)包得通信方式。同步方式邏輯清晰,編程專注于應(yīng)用, 在搶先式的多任務(wù)操作系統(tǒng)中 (Win NT、Win 2000),采用多線程方式效率基本達(dá)到異 步方式的水平。而異步指發(fā)送方發(fā)出數(shù)據(jù)以后,等收到接收方發(fā)回的響應(yīng), 才發(fā)出下一 個數(shù)據(jù)包的通信方式。阻塞套接字是指執(zhí)行此套接字的網(wǎng)絡(luò)
22、調(diào)用時, 直到成功才返回, 否則一直阻塞在此 網(wǎng)路調(diào)用上,比如調(diào)用 recv() 函數(shù)讀取網(wǎng)路緩沖區(qū)中的數(shù)據(jù),如果沒有數(shù)據(jù)到達(dá),將一 直用 recv() 這個函數(shù)調(diào)用上,知道讀到一些數(shù)據(jù),此函數(shù)才返回;而非阻塞套接字是指 此套接字的網(wǎng)絡(luò)調(diào)用時,不管是否執(zhí)行成功,都立即返回。比如調(diào)用 recv() 函數(shù)讀取網(wǎng) 絡(luò)緩沖區(qū)中的數(shù)據(jù),不管是否讀到數(shù)據(jù)都立即返回,而不會一直掛在此函數(shù)調(diào)用上。在 實際 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ù)。下面對一些常用的 Windows Sockets API 函數(shù)進(jìn)行簡單說明:1 、 socket() :創(chuàng)建一個 Socket。所有的通信在建立連接之前都要創(chuàng)建一個Socket,該函數(shù)的功能與文件操作中的fopen 類似。2 、 bind() :為創(chuàng)建的 Socket 指定通訊對象。成功建立 Socket 之后,就應(yīng)該選定通信的對象。首先是自己的程序需要與網(wǎng)絡(luò)上 的哪臺計算機通話;其次,在多任務(wù)的系統(tǒng)下,該臺計算機
24、可能會有幾個程序在工作, 必須指出與那個程序通信。 前者可以通過 Intenet 的網(wǎng)絡(luò) IP 地址來確定, 而后者就需要 指出端口號, 用端口號來表示同一臺計算機上不同的應(yīng)用程序, 可以從 0-65536 之間任 選, 不同功能的應(yīng)用程序使用不同的端口號,這樣一臺計算機上可以有幾個程序同時使用一個 IP 地址而互不干擾。3、 listen() :設(shè)置等待連接狀態(tài)。對于服務(wù)器的程序,當(dāng)申請到 Socket,并制定通信對象為INADDR-ANY之后,就 應(yīng)該等待一個客戶機的程序來要求連接。而 listen() 就是把一個 Socket 設(shè)置這種狀態(tài)的 函數(shù)。4、accept() :接收請求連接。
25、當(dāng)沒有連接請求時,對于阻塞方式,就進(jìn)入等待狀態(tài),直至有一個請求到達(dá)為止。5、connect() :主動提出請求連接。以上的 bind() 、listen() 、和 accept() 函數(shù)一般都用于服務(wù)程序,屬于被動等待的函 數(shù);對于客戶端,要主動提出連接請求,應(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)知識是下一章所展示的軟件的編寫基礎(chǔ), 只有在這一章的理論指導(dǎo)下, 軟件的編
26、寫才能合乎實際, 才能最終實現(xiàn)在局域網(wǎng)內(nèi)傳輸 文件。第3章軟件設(shè)計在第三章中展示了用局域網(wǎng)文件傳輸系統(tǒng),并成功傳輸了一個文件,這一章將對程 序內(nèi)部的細(xì)節(jié)予以介紹。該局域網(wǎng)文件傳輸系統(tǒng)使用VC+為編程語言,編程軟件為Microsoft Visual C+,使用對話框為該軟件的編程框架,其中用到了C+標(biāo)準(zhǔn)庫函數(shù)和MFC類庫,在并將其轉(zhuǎn)化為自己所需要的功能函數(shù)??蛻魴C和服務(wù)器的信息流如圖4-1所示:3.1局域網(wǎng)文件傳輸系統(tǒng)程序設(shè)計局域網(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端口號:; 阿爭要傳輸?shù)奈募窂紺; UsarsgaQwaiDaskt opFil«打開文件 |設(shè)置威服務(wù)器|祐輸文件|確走取消I3.2局域網(wǎng)文件傳輸系統(tǒng)設(shè)計步驟(1)創(chuàng)建一個基于對話框的應(yīng)用程序,在對話框中添加IP地址、Edit Box、Progress Bar等控件,如圖3-3所示:09 L -iiFikTi iiv.-frer局域網(wǎng)文件鶴輸if 地址:i:端口號:I需要鶴輸?shù)奈募窂剑篒打開文件I設(shè)置感朋勢器傳輸文件I確定I取消I話框為對話框中的控件命名或關(guān)聯(lián)數(shù)據(jù)。如圖3-4所示:(3)在對話框類的頭文件中引用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)在對話框的OnitDialog 方法中創(chuàng)建套接字。M_Clie nt=socket ( AF_INET,SOCK_STREAM,0;(6)在對話框類中添加成員函數(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; /本機 IPBOOLm_Received; /判斷是否接收到對方的回應(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ù)時 觸發(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;獲得對方的應(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(" 對方取消了文件接收 ");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 =" 請選擇目的路徑 "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ù)接收錯誤 ");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è)計客戶端所用到的函數(shù)(1)FileOpen() 打開文件對話框, 用來獲取文件路徑, 并將其路徑顯示文件路徑編 輯框中。文件路徑編輯框中。( 2)OnFileTransfer() 通過設(shè)置好了的 IP 地址和端口號, 該函數(shù)將實現(xiàn)文件從客戶 機到服務(wù)器文件的傳輸。( 3)InitAndConnet(HWND hwnd,UINT Port,CString strserver) 這個函數(shù)用來創(chuàng)建套 接字,通過界面上輸入的 IP 地址連接服務(wù)器。(4) Connect() 連接服務(wù)器函數(shù)。( 5 ) C
46、loseSocket 關(guān)閉一個 Socket 。3.4 設(shè)計服務(wù)器所用到的函數(shù)(1)OnSetServer() 這個函數(shù)用來創(chuàng)建服務(wù)器線程,并偵聽局域網(wǎng)絡(luò)中接發(fā)文件的 請求。(2)Accept() 用來接受客戶機的連接請求。(3) Listen() 這個函數(shù)用來將 Sokket 設(shè)置成連接等待狀態(tài)。( 4 ) CloseSocket() 關(guān)閉一個 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); 這個函數(shù)是系統(tǒng)命令響 應(yīng)函數(shù)afx_msg void OnPaint(); 這個函數(shù)是系統(tǒng)界面構(gòu)建函數(shù)afx_msg HCURSOR OnQueryDragIcon(); 這個函數(shù)是消息隊列函數(shù)afx_msg void OnOpenFile(); 這個函數(shù)負(fù)責(zé)構(gòu)建文件打開對話框,并使傳輸文件進(jìn)入 準(zhǔn)備狀態(tài)afx_msg void OnSetServer(); 這個函數(shù)用來創(chuàng)建服務(wù)線程,偵聽網(wǎng)絡(luò)中的消息afx_msg void OnFileTransfer(); 這個函數(shù)用來傳輸文件3.6 功能按鈕與函數(shù)的對應(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年安全評價師(中級)職業(yè)技能鑒定安全檢測案例分析試題
- 2025年文職人員招聘考試公共科目試卷四十三:軍事裝備維護(hù)
- 2025年征信數(shù)據(jù)分析挖掘考試題庫:征信數(shù)據(jù)分析挖掘項目評估標(biāo)準(zhǔn)
- 2025年會計職稱考試《初級會計實務(wù)》章節(jié)重難點突破實戰(zhàn)案例與解析試題
- 2025年聚碳酸酯(PC)及合金項目立項申請報告
- 2025年鍛造工(高級)職業(yè)技能鑒定真題分析與備考
- 2025年德語TestDaF閱讀真題試卷:德語閱讀能力全面訓(xùn)練卷
- 2025年對外漢語教師資格證考試課程與教學(xué)論試題
- 寵物食品分銷協(xié)議
- 個人工資增長證明書年收入增長證明(5篇)
- 北京朝陽社區(qū)工作者招聘歷年真題
- 安全及文明施工承諾書
- 工程量計算書(全部)
- 經(jīng)偵總論試題
- 陜西省安康市教育聯(lián)盟2023-2024學(xué)年高一下學(xué)期期末考試數(shù)學(xué)試卷
- 2023-2024學(xué)年景德鎮(zhèn)市珠山區(qū)數(shù)學(xué)五年級第二學(xué)期期末監(jiān)測試題含解析
- 小鎮(zhèn)文旅康養(yǎng)項目可研報告【健康養(yǎng)老】【旅游康養(yǎng)】
- CTD申報資料:創(chuàng)新藥IND模塊一-行政文件和藥品信息
- EHS專項施工EHS管理組織機構(gòu)
- 生理學(xué)神經(jīng)系統(tǒng)的功能
- 發(fā)電廠機組優(yōu)化調(diào)度與運行控制策略
評論
0/150
提交評論