基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)_第1頁
基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)_第2頁
基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)_第3頁
基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)_第4頁
基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、畢畢 業(yè)業(yè) 設設 計計( 論論 文文)基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)論文作者姓名:論文作者姓名:申請學位專業(yè):申請學位專業(yè):申請學位類別:申請學位類別:指指導導教教師師姓姓名名:論文提交日期:論文提交日期: 基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)基于局域網(wǎng)的文件傳輸系統(tǒng)的設計與實現(xiàn)摘摘 要要隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,計算機通信給人類文明帶來了翻天覆地的變化。很多情況下,人們的日常工作需要借助文件傳輸來完成。但大多數(shù)文件傳輸功能都需要借助移動磁盤等硬件設備或 Internet 上的服務器才能實現(xiàn)。這就給那些具有大規(guī)模內(nèi)部網(wǎng)絡的用戶造成了許多問題,如浪費資金

2、、浪費網(wǎng)絡資源、病毒入侵、降低了工作效率等。為了方便局域網(wǎng)內(nèi)主機的資源共享,需要開發(fā)一個基于局域網(wǎng)的文件傳輸工具,在內(nèi)部網(wǎng)絡中實現(xiàn)文件交換?;诰钟蚓W(wǎng)的文件傳輸系統(tǒng)的設計選用 Delphi 為開發(fā)工具,以 C/S 模式通過建立 Socket 連接后實現(xiàn)局域網(wǎng)快速,準確,安全的點對點文件以及文件夾傳輸功能。本系統(tǒng)能夠促進局域網(wǎng)內(nèi)用戶之間的文件資源共享,滿足主機之間信息交流,確保文件及文件夾傳輸安全性,有效地提高工作效率。設計共分為五大模塊,分別為:一、介紹選題背景及意義和國內(nèi)外研究現(xiàn)狀;二、介紹 TCP/IP 點對點協(xié)議技術(shù),C/S 架構(gòu)的 Delphi 程序設計技術(shù)和Socket 網(wǎng)絡編程技術(shù)

3、;三、對當前局域網(wǎng)文件傳輸進行需求分析并提出解決方案;四、根據(jù)解決方案對系統(tǒng)進行設計;五、對基于局域網(wǎng)的文件傳輸系統(tǒng)進行測試并得到測試結(jié)果。關(guān)鍵詞:關(guān)鍵詞:C/S 結(jié)構(gòu);網(wǎng)絡通訊組件;點對點;Socket 連接The Design and Implementation of File Transfer System Based on LANAbstractAlong with the Internet technology swift and violent development, the computer correspondence the human culture has broug

4、ht the earth-shaking change for. In very many situations, peoples routine work needs to draw support from the file transfer to complete. But the majority file transfer function all needs to draw support moves hardware equipment or the Internet and so in the floppy disk server can realize This gave t

5、hese to have the large-scale internal network user to create many problems, like the waste fund, the waste network resources, the viral invasion, reduced the working efficiency and so on. In order to facilitate in the local area network main engine resources sharing, needs to develop one based on th

6、e local area network file transfer tool, realizes the document exchange in internal network. The design and implementation of file transfer system base on LAN uses Delphi development tool,C/S mode through the establishment of Socket after connecting LAN users fast, accurate, the point-to-point secur

7、ity files and folders transmission functions. The system can contribute to LAN users to share file resources to meet the exchange of information between mainframe, ensure that the filets and folders transmission security, effectively improving efficiency. The design is divided into five major module

8、 altogether, including: First, introduction selected topic background and significance and domestic and foreign research present situation; Second, introduces the TCP/IP point to point protocol technology, C/S overhead construction Delphi programming technique and the Socket network programming tech

9、nology; Third, carries on the demand to the current local area network file transfer to analyze and to propose the solution; Fourth, carries on the design according to the solution to the system; Fifth, to carries on based on the local area network file transfer system tests and obtains the test res

10、ult.Key words: C/S structure; Network communication module; Point-to-point; Socket connection.目目 錄錄論文總頁數(shù):26 頁1引言.11.1選題背景.11.2國內(nèi)外研究現(xiàn)狀.11.3課題研究的意義.12理論基礎.22.1TCP/IP 點對點協(xié)議技術(shù) .22.2C/S 架構(gòu)的 DELPHI 程序設計技術(shù) .22.3SOCKET 網(wǎng)絡程序設計技術(shù) .33系統(tǒng)需求分析.43.1現(xiàn)行業(yè)務系統(tǒng)描述.43.2現(xiàn)行系統(tǒng)存在的主要問題分析.43.3提出解決方案.44系統(tǒng)設計.54.1系統(tǒng)總體架構(gòu).54.2系統(tǒng)界面設計

11、.64.2.1界面設計.64.2.2用戶信息.74.3系統(tǒng)功能模塊設計.94.3.1獲取用戶信息.94.3.2局域網(wǎng)內(nèi)文件傳輸.134.3.3局域網(wǎng)內(nèi)文件夾傳輸.175系統(tǒng)實施及測試.225.1實施概況.225.2測試方案.225.3測試結(jié)果.23參考文獻.24致 謝.25聲 明.26第 1 頁 共 26 頁1 1引言引言1.11.1 選題背景選題背景當今世界科學技術(shù)飛速發(fā)展,尤其以計算機通信網(wǎng)絡為代表的互聯(lián)網(wǎng)技術(shù)更是日新月異,令人眼花燎亂,目不睱接。在計算機與網(wǎng)絡迅速發(fā)展的今天,借助于網(wǎng)絡進行信息資源交流給人們帶來了極大的方便。各種文件傳輸系統(tǒng)都已被廣大用戶接受。比如 QQ、UC、Inter

12、net 郵件等互聯(lián)網(wǎng)中運用最為廣泛的文件傳輸工具,但它們之間的文件傳輸往往對遠程服務器有非常大的依賴性,沒有徹底實現(xiàn)點對點安全的文件傳輸。甚至需要花費大量的金錢購買各種移動磁盤或者其他局域網(wǎng)內(nèi)連接主機的硬件設備。而達到的效果卻總是因為傳輸效率以及安全威脅而受到很大的限制。在這種形勢下,開發(fā)一個功能簡單而實用,能在 Windows 操作系統(tǒng)中運行,并且具有可移植性的局域網(wǎng)內(nèi)文件傳輸工具勢在必行。1.21.2 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀目前,國內(nèi)外企業(yè)對局域網(wǎng)的文件傳輸系統(tǒng)認識和使用情況并不好,各個企業(yè)單位在局域網(wǎng)內(nèi)實現(xiàn)文件傳輸,資源共享還有很大的缺陷。技術(shù)無論是從理論上或?qū)嵺`上都還不夠完善。文

13、件傳輸系統(tǒng)由于比較復雜,可變因素較多,安全性低,因此發(fā)展還不成熟。但是隨著科學技術(shù)的發(fā)展,各種以局域網(wǎng)為單位的文件傳輸系統(tǒng)已經(jīng)進入穩(wěn)健發(fā)展期,比如說市面上比較普遍使用的 QQ、UC、飛鴿傳書等以內(nèi)部網(wǎng)絡為中心的資源共享系統(tǒng)也即將進入高速發(fā)展期。在國內(nèi),隨著企業(yè)資源管理的規(guī)范化和規(guī)模的不斷擴大,企業(yè)的計算機資源管理將不僅僅停留在依靠硬件或者Internet 網(wǎng)絡獲取,而且將會向著安全的內(nèi)部網(wǎng)絡化資源管理方式邁進。1.31.3 課題研究的意義課題研究的意義隨著網(wǎng)絡通信技術(shù)的發(fā)展與用戶需求日益多樣化,現(xiàn)代局域網(wǎng)絡正處在變革與發(fā)展之中,本課題的主要目的之一是為了更清晰地培養(yǎng)學生掌握科學研究方法的能力和

14、使學生迅速體會文件傳輸系統(tǒng)的研發(fā)過程?;诰钟蚓W(wǎng)的文件傳輸系統(tǒng)能夠讓家庭網(wǎng)絡以及各個企業(yè)等局域網(wǎng)對內(nèi)部資料有一個快捷,準確,安全的共享。特別是對如今較大系統(tǒng)研發(fā)的模塊分工合作得到了絕對保密性,從而使各項工作有計劃、更科學的進行及順利完成,使企業(yè)的辦事效率得到顯著提高。文件傳輸系統(tǒng)主要功能是自動獲取局域網(wǎng)內(nèi)用戶的主機名,IP 地址以及工作組名字,最終以 C/S 模式通過 TCP/IP 協(xié)議實現(xiàn)點到點文件傳輸功能。本系統(tǒng)既鍛煉了我們的實際動手能力,使我們將大學四年所學的理論知識與實際開發(fā)相結(jié)合,又引導我們進行了一次模擬實際產(chǎn)品的開發(fā),對于我們以后工作能力的培養(yǎng)具有重要的意義。 第 2 頁 共 26

15、 頁2 2理論基礎理論基礎2.12.1 TCP/IPTCP/IP 點對點協(xié)議技術(shù)點對點協(xié)議技術(shù)系統(tǒng)的文件傳輸功能主要依賴于建立客戶端與服務器之間點對點的的連接后實現(xiàn)。所以就得與TCP/IP協(xié)議協(xié)合。TCP/IP協(xié)議(Transmission Control Protocol/Internet Protocol)叫做傳輸控制/網(wǎng)際協(xié)議,又叫網(wǎng)絡通訊協(xié)議,這個協(xié)議是Internet國際互聯(lián)網(wǎng)絡的基礎。TCP/IP是網(wǎng)絡中使用的基本通信協(xié)議。雖然從名字上看TCP/IP包括兩個協(xié)議,傳輸控制協(xié)議(TCP)和網(wǎng)際協(xié)議(IP),但TCP/IP實際上是一組協(xié)議,只是TCP協(xié)議處于運輸層,它能夠確保文件準確的

16、傳送;而IP協(xié)議處于網(wǎng)絡層,它標識了處于網(wǎng)絡中任意主機的唯一身份。TCP協(xié)議和IP協(xié)議是保證數(shù)據(jù)完整傳輸?shù)膬蓚€基本的重要協(xié)議。通常說TCP/IP是Internet協(xié)議族,而不單單是TCP和IP。采用TCP/IP詳解的原因:第一,局域網(wǎng)內(nèi)主機之間的是依靠IP地址進行標識。本設計要實現(xiàn)文件及文件夾的傳輸就需要以IP地址為傳送基礎進行; 第二,新用戶上線后需要向局域網(wǎng)內(nèi)所有用戶廣播自己的主機信息使網(wǎng)內(nèi)主機得到本機的IP地址等。需要用到與TCP/IP相對的UDP協(xié)議。2.22.2 C/SC/S 架構(gòu)的架構(gòu)的 DELPHIDELPHI 程序設計技術(shù)程序設計技術(shù)本系統(tǒng)的開發(fā)主要采用 C/S 結(jié)構(gòu)。所謂 C

17、/S (Client/Server)結(jié)構(gòu),即大家熟知的客戶機和服務器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利用兩端硬件環(huán)境的優(yōu)勢,將信息交互任務合理分配到 Client 端和 Server 端來實現(xiàn),降低了系統(tǒng)文件傳輸過程中的開銷。目前大多數(shù)應用軟件系統(tǒng)都是Client/Server 形式的兩層結(jié)構(gòu)。傳統(tǒng)的 CS 體系結(jié)構(gòu)雖然采用的是開放模式,但這只是系統(tǒng)開發(fā)一級的開放性,在特定的應用中無論是 Client 端還是Server 端都還需要特定的軟件支持。由于沒能提供用戶真正期望的開放環(huán)境,C/S 結(jié)構(gòu)的軟件需要針對不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本的軟件,加之產(chǎn)品的更新?lián)Q代十分快,已經(jīng)很難適應

18、百臺電腦以上局域網(wǎng)用戶同時使用。第 3 頁 共 26 頁 Request ResponseRequest Response Request Response . . . . Request . Response圖 1 客戶機/服務器通訊結(jié)構(gòu)文件傳輸系統(tǒng)同時采用了 Delphi 網(wǎng)絡組件編程技術(shù)。Delphi 是美國BORLAND 公司推出的功能強大的應用程序開發(fā)工具。它具有簡單、高效、功能強大的特點。它可是眾多程序員至愛的編程工具。Delphi 具有很多特性:基于窗體和面向?qū)ο蟮姆椒?,高速的編譯器,與 Windows 編程緊密結(jié)合,強大而成熟的組件技術(shù)。而且其重要的還有 Object Pasc

19、al 語言,它是一切的根本。 Object Pascal 語言是在 Pascal 語言的基礎上發(fā)展起來的,簡單易學。Delphi提供了各種開發(fā)工具,包括集成環(huán)境、圖像編輯(Image Editor) ,以及各種開發(fā)可視化軟件的應用程序,如 DesktopDataBase Expert 等。除此之外,還允許用戶掛接其它的應用程序開發(fā)工具,如 Borland 公司的資源編輯器(Resourse Workshop) 。DELPHI 是可視化應用編程開發(fā)環(huán)境,可重用性面向?qū)ο缶幊陶Z言,快速編譯器能夠有效快速建立 WINDOWS 應用程序,快速簡化 WINDOWS 與瀏覽器客戶,WEB 服務器以及中間件

20、等開發(fā)之外,同時也支持基于 WEB 服務的Microsoft,.net, Sun one 體系,而且提供給 WEB 開發(fā)者需要的可伸縮性和可靠性。用戶可以開發(fā)支持 WEB 服務特性的服務器端和客戶端應用,而這一切都是通過一套高度集成的可視化開發(fā)工具,先進的編譯技術(shù)和可重用的組件完成。2.32.3 SOCKETSOCKET 網(wǎng)絡程序設計技術(shù)網(wǎng)絡程序設計技術(shù)文件傳輸系統(tǒng)得以實現(xiàn)的根本在于建立有效的連接以及是否存在文件傳輸載體。所謂 Socket 通常也稱作套接字,用于描述 IP 地址和端口,socket 類表現(xiàn)了客戶端套接字,它是屬于兩臺計算機的兩個 TCP 通訊端口之間的通訊通道。在網(wǎng)絡編程中,

21、客戶端使用 Socket 對網(wǎng)絡上某一個服務器的某一個端口發(fā) 服務器主機客戶機 A客戶機 B客戶機 C客戶機 N第 4 頁 共 26 頁出連接請求,一旦連接成功,打開會話;會話完成后,關(guān)閉 Socket??蛻舳瞬恍枰付ù蜷_的端口。服務器使用 Socket 監(jiān)聽指定的端口,端口可以隨意指定,等待客戶連接請求,客戶連接后,會話產(chǎn)生;在完成會話后,關(guān)閉連接。3 3系統(tǒng)需求分析系統(tǒng)需求分析3.13.1 現(xiàn)行業(yè)務系統(tǒng)描述現(xiàn)行業(yè)務系統(tǒng)描述目前各種文件資源交流的主要方式可以分為三種:(1)通過局域網(wǎng)內(nèi)主機之間以文件共享后再經(jīng)過復制,粘貼方式實現(xiàn)。 (2)依靠可移動磁盤的兩次信息轉(zhuǎn)移實現(xiàn)。 (3)通過 In

22、ternet 郵件方式實現(xiàn)。此三種方法并非不可行,但它們都需要花費較長的時間以及安全性也得不到保證,工作效率將在很大程度上受到限制。如果通過局域網(wǎng)內(nèi)主機之間復制粘貼來實現(xiàn)文件資源共享,將浪費大量的網(wǎng)絡帶寬,極大程度上影響了網(wǎng)內(nèi)用戶的工作效率,甚至導致用戶不能正常工作;如果依靠移動磁盤實現(xiàn)文件的共享,將花費大量的金錢,而文件較大移動磁盤容量不足的情況下會令人極為頭疼,何況移動磁盤是病毒傳播的重要途徑;如果通過 Internet 郵件方式實現(xiàn),用戶需要接入 Internet 服務器,這種方式對遠程服務器有非常大的依賴性,即使 1KB 的文件都要經(jīng)歷極度繁瑣的路徑,不能徹底實現(xiàn)點對點的即時交流,文件

23、較大的情況下就不言而喻了。最重要的是,在如今病毒黑客橫行的網(wǎng)絡世界中,信息的安全性也得不到保證。 綜上所述,依靠 Internet 網(wǎng)絡等方式實現(xiàn)文件資源交互的準確性,快速性及安全性遠達不到理想的要求。3.23.2 現(xiàn)行系統(tǒng)存在的主要問題分析現(xiàn)行系統(tǒng)存在的主要問題分析針對企業(yè)來說,提高工作效率是企業(yè)的一個重心;降低成本是企業(yè)贏取最大利益的重要方式;保證信息安全卻是可能影響企業(yè)生死存亡的關(guān)鍵。企業(yè)需要對各種因素有足夠深刻的認識才可能實現(xiàn)最終目標-盈利。而傳統(tǒng)的文件資源交互方式卻存在很多的問題,大致可以分為:一、不能有效地降低文件交互成本;二、文件交換過程過于繁瑣;三、內(nèi)部機密資料得不到安全保證;

24、四、文件交互的準確性得不到更本保證。3.33.3 提出解決方案提出解決方案解決當前問題的方案主要是指在允許的成本、性能要求下,分析系統(tǒng)實施的可行性,提出功能實現(xiàn)的依據(jù),包括其簡單性,安全性以及經(jīng)濟可行性。根據(jù)企業(yè)簡單快速,安全的資源共享等要求,提出以下四種解決方案:1)操作簡單性方案:開發(fā)的系統(tǒng)需要有以下特點:Windows 友好的用戶界面和系統(tǒng)快速的應用方法,簡單易操作,不需對使用人員進行培訓,可以使用戶很好的掌握。對傳輸文件過程中的文件的載入設置都是非常簡單可行,比如:第 5 頁 共 26 頁如果用戶忘記選擇文件接收者的時候系統(tǒng)會自動提示“請選擇接收用戶”要求用戶選擇主機而不導致錯誤出現(xiàn)而

25、引發(fā)的不便,這樣就大大提高工作效率。而且開發(fā)的系統(tǒng)應該簡單易操作,易維護,減少了不必要的麻煩。對于家庭局域網(wǎng)以及一些比較簡單的中小企業(yè)網(wǎng),系統(tǒng)必須做到在實際應用中較為成功。系統(tǒng)應為用戶提供 Windows 所一貫堅持的非常友好、操作簡單的用戶界面。2)傳輸安全性方案:系統(tǒng)開發(fā)完成后,能有效地使內(nèi)部資源與外網(wǎng)的完全隔離,從而保證了內(nèi)部機密文件的安全性。3)經(jīng)濟可行性方案:系統(tǒng)開發(fā)完成必須作到提高文件共享效率,不管是在資金上還是效率上都能達到預期的效果的。最重要的一點就是:使用戶避免花費高額的資金去購買各種移動磁盤甚至是通過 Internet 郵件方式,使得用戶方便的同時,也讓信息少走了不少“彎路

26、” 。4)快速準確性方案:鑒于系統(tǒng)的目標要求和特點,能夠保證快速準確地實現(xiàn)文件共享。綜合上述,本設計在 Windows XP 操作系統(tǒng)下,以中文版 Delphi7 為開發(fā)工具,以 C/S 為系統(tǒng)功能結(jié)構(gòu),基于點對點的 TCP/IP 協(xié)議理論,通過 Socket 套節(jié)字連接客戶端與服務器實現(xiàn)文件及文件夾傳輸。徹底避免了文件交換過程與外部網(wǎng)絡的接觸,實現(xiàn)快速的文件資源共享。并能夠確保內(nèi)部文件的機密性,能夠在很大程度上有效地提高工作效率。4 4系統(tǒng)設計系統(tǒng)設計4.14.1 系統(tǒng)總體架構(gòu)系統(tǒng)總體架構(gòu)本系統(tǒng)的設計過程主要分為兩部分:第一部分:系統(tǒng)界面的設計以及獲取局域網(wǎng)內(nèi)所有在線用戶的主機名,IP地址以

27、及工作組名。使網(wǎng)內(nèi)所有用戶都能夠獲取其他用戶信息。第二部分:文件傳輸是本設計功能實現(xiàn)的核心。系統(tǒng)采用 C/S 架構(gòu)將系統(tǒng)運行載體分為兩個部分:客戶端與服務器端。文件傳輸需要建立有效的連接后,通過 TCP/IP 協(xié)議實現(xiàn)點對點的文件傳輸。通信雙方是通過三次握手建立Socket 連接,實現(xiàn)文件傳輸,最后關(guān)閉套節(jié)字連接。文件傳輸?shù)恼麄€流程圖如下:第 6 頁 共 26 頁TCP/IP3 次握手SOCKET 流 三次握手圖 2 文件傳輸系統(tǒng)框架圖4.24.2 系統(tǒng)界面設計系統(tǒng)界面設計4.2.1界面設計界面設計界面是系統(tǒng)功能得以實現(xiàn)的基本平臺,這里充分利用 Delphi 可視化開發(fā)環(huán)境以各種組件設置。界面

28、的設計可以分為五步:1)創(chuàng)建一個工程,制作一個窗體 form1;2)在 form1 內(nèi)加入用戶列表 userlist 并設置列表項:用戶名,工作組,IP 地址以及它們的屬性;3)在 form1 內(nèi)加入 Memo1;4)在 Memo1 內(nèi)加入各種 DELPHI 網(wǎng)絡通訊控件,本系統(tǒng)用到的控件分別有:a. 用于傳送文件是打開文件的控件 OpenDialog1;b. 用于接收端保存文件的控件 SaveDialog1;c. 用于點到點文件傳輸?shù)目蛻舳?PClientConnected 及服務器端PServerAfterCommandHandler;d. 用于廣播主機信息的客戶端 ClientStatu

29、s 和服務器端 ServerStatus 數(shù)據(jù)報組件;e. 用于設置退出系統(tǒng)和窗口前端顯示的 PopupMenu1 菜單;5)分別創(chuàng)建刷新按鈕 BitBtn1,文件傳輸 BitBtn2 以及文件夾傳輸 BitBtn3按鈕??蛻舳酥鳈C服務器端主機套節(jié)字連接請求連接響應寫入文件流接收文件流并保存斷開連接斷開連接響應第 7 頁 共 26 頁設置的界面如下圖:圖 3 基于局域網(wǎng)的文件傳輸系統(tǒng)界面4.2.2用戶信息用戶信息用戶列表建立以后,將局域網(wǎng)內(nèi)所有在線用戶的主機名,主機 IP 地址以及工作組名顯示于列表中。方法是首先確定用戶主機是上線信息,返回信息,握手信息還是離線信息。這里對他們分別設置了一個信

30、息發(fā)送的頭信息,分別設置為:LOGIN,HAND 以及 LOGOUT。如果新用戶上線,它就向局域網(wǎng)以 LOGIN 為頭信息廣播本機的主機名,IP 地址以及工作組。局域網(wǎng)內(nèi)所有在線主機收到該廣播信息以后將新上線的主機名,端口,IP 地址以及工作組信息添加到自己的在線用戶列表并都以 HAND 為頭信息向局域網(wǎng)廣播本機的握手信息;當包括剛上線主機在內(nèi)的局域網(wǎng)所有主機收到這個握手信息以后線判斷自己的在線用戶列表中是否存在這個主機廣播的主機信息,如果不存在就說明它是剛上線主機,最后將這個信息添加到自己在線列表,否則就不加;當用戶下線的時候也將自己的信息以 LOGOUT 為頭信息廣播給局域網(wǎng),其他在線用戶

31、收到這個消息以后將其主機信息從本地在線用戶列表刪除。其部分的源代碼分別如下:第 8 頁 共 26 頁procedure TForm1.FormCreate(Sender: TObject); /新用戶上線 以 LOGIN 為頭信息var wsadata:twsadata; myinfobuf:array0.1023of char; /本機信息 pmyname:array0.1023of char; /本機名wList,clist: TStringList ; i,j:integer;begin mainhide; /把程序圖標顯示在系統(tǒng)托盤里邊 if wsastartup($101,wsada

32、ta)0 then exit; /獲取本機名 gethostname(pmyname,sizeof(pmyname); /獲取主機名 myname:=strpas(pmyname);/得到主機名 try wlist:=tstringlist.Create; clist:=tstringlist.Create; GetServerList(wList); /獲取本機 IP for i:=0 to wlist.Count-1 do begin getusers(wlist.Stringsi,clist);/得到用戶名 for j:=0 to clist.Count-1 do begin if (c

33、list.Stringsj=uppercase(myname) or (clist.Stringsj=myname) then begin myworkgroup:=wlist.Stringsi; /獲本機工作組 end; finally wlist.Free; clist.Free; end; myinfo:=format(%-6s%-255s%-255s,LOGIN,myname,myworkgroup); strpcopy(myinfobuf,myinfo); client.Broadcast(myinfobuf,9000); end;function tform1.handdata(i

34、p,name,workgroup:string;port:integer):string; /向好友發(fā)握手信息 var minfobuf:array0.1023of char; minfo:string;begin minfo:=format(%-6s%-255s%-255s,HAND,name,workgroup); strpcopy(minfobuf,minfo); server.SendBuffer(ip,port,minfobuf,sizeof(minfobuf);end;procedure TForm1.N10Click(Sender: TObject); /用戶離線 以 LOGIN

35、OUT 為頭信息var mylogoutbuf:array0.1023of char; mylogoutinfo:string;begin mylogoutinfo:=format(%-6s%-255s,LOGOUT,myname); strpcopy(mylogoutbuf,mylogoutinfo); client.Broadcast(mylogoutbuf,9000); / 廣播自己離線信息 Application.Terminate; /銷毀線程end;第 9 頁 共 26 頁4.34.3 系統(tǒng)功能模塊設計系統(tǒng)功能模塊設計4.3.1 獲取用戶信息獲取用戶信息本部分主要是顯示用戶列表中在

36、線用戶的主機名,主機的 IP 地址以及工作組名三部分,代碼分別進行介紹如下:獲取局域網(wǎng)內(nèi)用戶名的源代碼如下:Function tform1.GetUsers( GroupName : string;List : TStringList) : Boolean; /獲取工作組的計算機名稱type TNetResourceArray = TNetResource;VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : Integer;lphEnum : THandle;Temp : TNetResourc

37、eArray;TmpStr:String;BeginResult := False;FillChar(NetResource, SizeOf(NetResource), 0);/初始化網(wǎng)絡層次信息NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;/類型為服務器(工作組)/ NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;NetResource.dwScope := RESOURCETYPE_DISK;/列舉文件資源信Res := WNetOpenEnum( RESOURCE_GLOBAL

38、NET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, NetResource,lphEnum);If Res NO_ERROR Then Exit; /執(zhí)行失敗While True Do/列舉指定工作組的網(wǎng)絡資源BeginCount := $FFFFFFFF;/不限資源數(shù)目BufSize := 8192;/緩沖區(qū)大小設置為 8KGetMem(Buf, BufSize);/申請內(nèi)存,用于獲取工作組信息/獲取計算機名稱 Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);第 11 頁

39、 共 26 頁獲取局域網(wǎng)的用戶 IP 地址以及添加用戶信息的源代碼如下:If Res = ERROR_NO_MORE_ITEMS Then break;/資源列舉完畢 If (Res NO_ERROR) then Exit; /執(zhí)行失敗 Temp := TNetResourceArray(Buf); For Ind := 0 to Count - 1 do/列舉工作組的計算機名稱 Begin tmpStr:=Temp.lpRemoteName;/獲取工作組的計算機名稱 Delete(tmpstr,1,2); list.Add(tmpstr); Inc(Temp); End; End; Res

40、:= WNetCloseEnum(lphEnum);/關(guān)閉一次列舉 If Res NO_ERROR Then exit;/執(zhí)行失敗Result := True; FreeMem(Buf);End;procedure TForm1.ServerUDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);var readbuf:array0.2030of char; msg,head,recvip,recvname,recvworkgroup,recvmsg,memo:string; recvport:integer; f

41、:textfile;begin ZeroMemory(readbuf0,2030); adata.Read(readbuf,sizeof(readbuf); msg:=Trim(String(Pchar(Readbuf0); /memo1.Lines.Add(msg); head:=trim(copy(msg,1,headlen); if head=LOGIN THEN /添加對方 IP 1.返回對方 IP 2. 發(fā)出 Hand 握手信息 begin recvip:=abinding.PeerIP; recvport:=9000;第 12 頁 共 26 頁獲取局域網(wǎng)的工作組名的源代碼如下: /

42、 memo1.Lines.Add(login recv+recvip+inttostr(recvport); recvname:=copy(msg,headlen+1,namelen); recvworkgroup:=copy(msg,headlen+namelen+1,length(msg); adduser(recvname,recvworkgroup,recvip,recvport); handdata(recvip,myname,myworkgroup,recvport); minfo:=format(%-6s%-4d%-255s,HAND,myname,myworkgroup); /

43、返回對方 IP /端口等信息 strpcopy(minfobuf,minfo); server.SendBuffer(recvip,recvport,minfobuf,sizeof(minfobuf); end; if head=REVLOGthen /添加對方返回的自己的 ip (對比) begin / memo1.Lines.Add(revlog recv); RECVPORT:=strtoint(copy(msg,headlen+1,portlen); recvip:=copy(msg,headlen+portlen+1,iplen); end;if head=HANDTHEN /處理握

44、手信息 添加對方 ip 返回對方 ip BEgin / memo1.Lines.Add(hand recv); RECVNAME:=COPY(msg,headlen+1,namelen); recvworkgroup:=copy(msg,headlen+namelen+1,workglen); recvip:=abinding.PeerIP; recvport:=9000; recvp2pdata(recvip,recvname,recvworkgroup,recvport); END;if head=LOGOUTthen /處理 logout delete 其 ip begin recvna

45、me:=copy(msg,headlen+1,namelen); if mynamerecvname then deleteuser(recvname); end;Function tform1.GetServerList( var List : TStringList ) : Boolean; /獲取服務列表Var NetResource : TNetResource; /初始化網(wǎng)絡層次信息Buf : Pointer;Count,BufSize,Res : DWORD;lphEnum : THandle;第 13 頁 共 26 頁p : TNetResourceArray;i,j : Sma

46、llInt;NetworkTypeList : TList; /返回局域網(wǎng)中的工作組類型BeginResult := False;NetworkTypeList := TList.Create; /獲取局域網(wǎng)中的工作組信息List.Clear;/獲取整個網(wǎng)絡中的文件資源的句柄,lphEnum 為返回名柄Res:=WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum); /得到網(wǎng)絡中的所有工作組的名稱If Res NO_ERROR Then exit;/Raise Exc

47、eption(Res);/執(zhí)行失敗/獲取整個網(wǎng)絡中的網(wǎng)絡類型信息Count := $FFFFFFFF;/不限資源數(shù)目BufSize := 8192;/緩沖區(qū)大小設置為 8KGetMem(Buf, BufSize);/申請內(nèi)存,用于獲取工作組信息Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); /獲取計算機名稱If ( Res = ERROR_NO_MORE_ITEMS ) /資源列舉完畢or (Res NO_ERROR) /執(zhí)行失敗then break;P := TNetResourceArray(Buf);For

48、I := 0 To Count - 1 Do /列舉各個工作組的信息BeginList.Add( StrPAS( P.lpRemoteName ) ;/取得一個工作組的名稱Inc(P);End;End;Res := WNetCloseEnum(lphEnum);/關(guān)閉一次列舉If Res NO_ERROR Then break;/執(zhí)行失敗End;Result := True;FreeMem(Buf);NetworkTypeList.Destroy;End; 第 14 頁 共 26 頁4.3.2 局域網(wǎng)內(nèi)文件傳輸局域網(wǎng)內(nèi)文件傳輸文件傳輸實現(xiàn)之前,需要獲取在線用戶列表中的用戶信息。所以系統(tǒng)設置一個

49、“刷新”按鈕,當用戶點擊 “刷新”后將更新界面的用戶列表中所有在線用戶 的主機名,主機IP地址和工作組名。并顯示在線人數(shù)。源代碼如下:文件以及文件夾傳輸功能是本設計能夠?qū)崿F(xiàn)的理論核心。系統(tǒng)實現(xiàn)主要依靠發(fā)送端與接收端建立有效的連接后,客戶端不斷地向SOCKET寫入文件流,服務器端不斷接受來自客戶端的SOCKET文件流。直到文件傳輸完畢關(guān)閉套節(jié)字連接并釋放空間。文件傳輸?shù)恼麄€過程可以分別表示為:客戶端和服務器端。1)客戶端連接并發(fā)送功能:客戶端點擊文件發(fā)送按鈕以后,系統(tǒng)首先判斷是否選擇文件接受者。如果沒有選擇就提示用戶選擇接收者。然后以組件opendialog1.Execute打開傳輸文件。建立文

50、件流并執(zhí)行TSendThread.Execute。在TSendThread.Execute中寫入接收主機的IP及端口號。向服務器發(fā)送連接請求。連接成功后發(fā)送文件流。代碼依次如下:Procedure TForm1. BitBtn2Click(Sender: TObject); /發(fā)送按鈕 文件傳輸事件var filename:string;tempItem:TListItem;begintempItem:=UserList.Selected; /獲取文件接收者if (not assigned(tempItem) or (tempItem=nil) thenbegin MessageBox(sel

51、f.Handle ,請選擇消息接收者!,提示,0); exit; end;if opendialog1.Execute then /如果文件打開。 。 。 beginprocedure TForm1.BitBtn1Click(Sender: TObject); /顯示在線人數(shù)var f:textfile;begin Label2.Caption:=INTTOSTR(USERLIST.Items.Count);end;第 15 頁 共 26 頁文件打開后客戶端調(diào)用函數(shù)TSendThread.createThread建立文件傳輸流。此函數(shù)的源代碼如下: 文件流建立后由inherited creat

52、e(false)提示系統(tǒng)自動執(zhí)行TSendThread.Execute函數(shù)發(fā)送文件。碼如下:onstructor TSendThread.createThread(IP,FileName:string); /創(chuàng)建文件線程begin Fip:=IP; FFilename:=filename; FreeonTerminate:=true; /完成后自動關(guān)閉 inherited create(false); /表示創(chuàng)建線程后立刻執(zhí)行end;procedure TSendThread.Execute; /運行線程var socket:tidtcpclient; /定義客戶端套節(jié)字 fs:tfilest

53、ream; /定義文件流begintry socket:=tidtcpclient.Create(nil); /創(chuàng)建客戶端套界字 socket.Host:=Fip; /寫入 IPsocket.Connect(); /進行套節(jié)字連接 if socket.Connected then fs:=tfilestream.Create(FFileName,fmopenread); /創(chuàng)建文件流和文件建立關(guān)聯(lián)設置 /參數(shù) fmopenread=file mode openread try socket.WriteLn(TRANSFILE); /寫入套接字類型為 TRANSFILE socket.Write

54、Ln(FFileName); /寫入傳輸?shù)奈募?socket.WriteLn(inttostr(fs.Size); /整型轉(zhuǎn)字符型 fs.Size 為字節(jié)流的長度 filename:=opendialog1.FileName; /獲取文件名 TSendThread.createThread(tempitem.SubItems.Strings1,extractfilename(filename); /創(chuàng)建線程并立刻執(zhí)行 end;end;第 16 頁 共 26 頁文件傳輸完畢以后斷開SOCKET連接并釋放套節(jié)字空間。2)服務器端響應功能:當服務器收到來自客戶端文件傳輸連接請求后,對其進行連接響應

55、建立連接。連接建立后得到文件的基本信息,進行自動初始化并分配臨時空間。如果文件大小為OK就認為是文件傳輸完畢自動斷開連接。否則接收文件開始。當傳輸完畢后斷開連接。其源代碼如下:procedure TForm1.PServerExecute(AThread: TIdPeerThread); /服務器端.var cmd,tmpfn,msg,targetname,localdir,com:string; lsize:int64; fs:tfilestream;filename:pchar; sign,i:integer; ldir:stringarray; lSavePath,Savedir:Str

56、ing;begin with athread.Connection do begin cmd:=trim(readln); / memo1.Lines.Add(cmd); if cmd=TRANSFILEthen begin GetMem(filename,255); zeromemory(filename,255); socket.WriteStream(fs,false,false,fs.Size); /寫入文件 finally fs.Free; /釋放文件流 end; getmem(hostname,255); /post the hostname /分配監(jiān)視器內(nèi)存 zeromemory

57、(hostname,255);/清空內(nèi)存 move(myname1,hostname,length(myName);/獲取傳輸文件名 postmessage(TranSuVisorform.handle,TransferSupervisorTwo,integer(hostname),0); getmem(pname,255); zeromemory(pname,255); /post fname and size move(FFileName1,pname,length(FFileName); postmessage(TranSuVisorform.handle,TransferSupervi

58、sor,integer(pname),lSize); end;第 17 頁 共 26 頁tmpfn:=readln;move(tmpfn1,filename,length(tmpfn);sendmessage(form1.Handle,WM_USER+100,integer(filename),0);writeln(BEGIN);lsize:=strtointdef(readln,0);if lsize=0 thenbegindisconnect;exit;end;fs:=TFileStream.Create(filename,fmcreate);readstream(fs,lsize);fs

59、.Free;end;if cmd=STARTthenbeginmsg:=readln(); /接收文件名ldir:=split(msg,);localdir:=strpas(localroot);for i:=0 to high(ldir)-1 dobeginlocaldir:=localdir+ldiri+;if not directoryexists(localdir) thencreatedir(localdir); /創(chuàng)建接收到的文件夾下邊的文件夾end;targetname:=strpas(localroot)+msg; /本地文件名writeln(BEGIN); /發(fā)送開始信號ls

60、ize:=strtointdef(readln,0); /接收文件大小if lsize=0 thenbegindisconnect;exit;end; /如果發(fā)過來的文件是 0KB 的 會收不到 所以 Deletefs:=TFileStream.Create(targetname,fmcreate);readstream(fs,lsize);fs.Free;/ openrevfilepath:=trim(strpas(localroot)+trim(ldir0);end;end;end;end;第 18 頁 共 26 頁服務器端將收到的文件流重組以后通過Delphi組件SaveDialog設置

溫馨提示

  • 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

提交評論