




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、A A 公司局域網(wǎng)文件傳輸存在的問(wèn)題及對(duì)策公司局域網(wǎng)文件傳輸存在的問(wèn)題及對(duì)策摘摘 要要隨著互聯(lián)網(wǎng)技術(shù)的迅猛開(kāi)展,計(jì)算機(jī)通信給人類(lèi)文明帶來(lái)了翻天覆地的變化。很多情況下,人們的日常工作需要借助文件傳輸來(lái)完成。但大多數(shù)文件傳輸功能都需要借助移動(dòng)磁盤(pán)等硬件設(shè)備或 Internet 上的效勞器才能實(shí)現(xiàn)。這就給那些具有大規(guī)模內(nèi)部網(wǎng)絡(luò)的用戶造成了許多問(wèn)題,如浪費(fèi)資金、浪費(fèi)網(wǎng)絡(luò)資源、病毒入侵、降低了工作效率等。為了方便局域網(wǎng)內(nèi)主機(jī)的資源共享,需要開(kāi)發(fā)一個(gè)基于局域網(wǎng)的文件傳輸工具,在內(nèi)部網(wǎng)絡(luò)中實(shí)現(xiàn)文件交換?;诰钟蚓W(wǎng)的文件傳輸系統(tǒng)的設(shè)計(jì)選用 Delphi 為開(kāi)發(fā)工具,以 C/S 模式通過(guò)建立 Socket 連接
2、后實(shí)現(xiàn)局域網(wǎng)快速,準(zhǔn)確,平安的點(diǎn)對(duì)點(diǎn)文件以及文件夾傳輸功能。本系統(tǒng)能夠促進(jìn)局域網(wǎng)內(nèi)用戶之間的文件資源共享,滿足主機(jī)之間信息交流,確保文件及文件夾傳輸平安性,有效地提高工作效率。設(shè)計(jì)共分為五大模塊,分別為:一、介紹選題背景及意義和國(guó)內(nèi)外研究現(xiàn)狀;二、介紹 TCP/IP 點(diǎn)對(duì)點(diǎn)協(xié)議技術(shù),C/S 架構(gòu)的 Delphi 程序設(shè)計(jì)技術(shù)和Socket 網(wǎng)絡(luò)編程技術(shù);三、對(duì)當(dāng)前局域網(wǎng)文件傳輸進(jìn)行需求分析并提出解決方案;四、根據(jù)解決方案對(duì)系統(tǒng)進(jìn)行設(shè)計(jì);五、對(duì)基于局域網(wǎng)的文件傳輸系統(tǒng)進(jìn)行測(cè)試并得到測(cè)試結(jié)果。關(guān)鍵詞:關(guān)鍵詞:C/S 結(jié)構(gòu);網(wǎng)絡(luò)通訊組件;點(diǎn)對(duì)點(diǎn);Socket 連接The Design and Imp
3、lementation of File Transfer System Based on LANAbstractAlong with the Internet technology swift and violent development, the computer correspondence the human culture has brought the earth-shaking change for. In very many situations, peoples routine work needs to draw support from the file transfer
4、 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 these to have the large-scale internal network user to create many problems, like the waste fund, the waste network resource
5、s, 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 the local area network file transfer tool, realizes the document exchange in internal network. The design and implementation
6、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 security files and folders transmission functions. The system can contribute to LAN users to share file resources to meet the ex
7、change of information between mainframe, ensure that the filets and folders transmission security, effectively improving efficiency. The design is divided into five major module altogether, including: First, introduction selected topic background and significance and domestic and foreign research pr
8、esent situation; Second, introduces the TCP/IP point to point protocol technology, C/S overhead construction Delphi programming technique and the Socket network programming technology; Third, carries on the demand to the current local area network file transfer to analyze and to propose the solution
9、; 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 result.Key words: C/S structure; Network communication module; Point-to-point; Socket connection.目目 錄錄論文總頁(yè)數(shù):26 頁(yè)1引言.1選題背景.1國(guó)內(nèi)外
10、研究現(xiàn)狀.1課題研究的意義.12理論根底.2TCP/IP 點(diǎn)對(duì)點(diǎn)協(xié)議技術(shù) .2C/S 架構(gòu)的 DELPHI 程序設(shè)計(jì)技術(shù) .2SOCKET 網(wǎng)絡(luò)程序設(shè)計(jì)技術(shù) .33系統(tǒng)需求分析.4現(xiàn)行業(yè)務(wù)系統(tǒng)描述.4現(xiàn)行系統(tǒng)存在的主要問(wèn)題分析.4提出解決方案.44系統(tǒng)設(shè)計(jì).5系統(tǒng)總體架構(gòu).5系統(tǒng)界面設(shè)計(jì).6界面設(shè)計(jì).6用戶信息.7系統(tǒng)功能模塊設(shè)計(jì).9獲取用戶信息.9局域網(wǎng)內(nèi)文件傳輸.13局域網(wǎng)內(nèi)文件夾傳輸.175系統(tǒng)實(shí)施及測(cè)試.22實(shí)施概況.22測(cè)試方案.22測(cè)試結(jié)果.23參考文獻(xiàn).241 1引言引言1.11.1 選題背景選題背景當(dāng)今世界科學(xué)技術(shù)飛速開(kāi)展,尤其以計(jì)算機(jī)通信網(wǎng)絡(luò)為代表的互聯(lián)網(wǎng)技術(shù)更是日新月異,令
11、人眼花燎亂,目不睱接。在計(jì)算機(jī)與網(wǎng)絡(luò)迅速開(kāi)展的今天,借助于網(wǎng)絡(luò)進(jìn)行信息資源交流給人們帶來(lái)了極大的方便。各種文件傳輸系統(tǒng)都已被廣闊用戶接受。比方 QQ、UC、Internet 郵件等互聯(lián)網(wǎng)中運(yùn)用最為廣泛的文件傳輸工具,但它們之間的文件傳輸往往對(duì)遠(yuǎn)程效勞器有非常大的依賴(lài)性,沒(méi)有徹底實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)平安的文件傳輸。甚至需要花費(fèi)大量的金錢(qián)購(gòu)置各種移動(dòng)磁盤(pán)或者其他局域網(wǎng)內(nèi)連接主機(jī)的硬件設(shè)備。而到達(dá)的效果卻總是因?yàn)閭鬏斝室约捌桨餐{而受到很大的限制。在這種形勢(shì)下,開(kāi)發(fā)一個(gè)功能簡(jiǎn)單而實(shí)用,能在 Windows 操作系統(tǒng)中運(yùn)行,并且具有可移植性的局域網(wǎng)內(nèi)文件傳輸工具勢(shì)在必行。1.21.2 國(guó)內(nèi)外研究現(xiàn)狀國(guó)內(nèi)外研究
12、現(xiàn)狀目前,國(guó)內(nèi)外企業(yè)對(duì)局域網(wǎng)的文件傳輸系統(tǒng)認(rèn)識(shí)和使用情況并不好,各個(gè)企業(yè)單位在局域網(wǎng)內(nèi)實(shí)現(xiàn)文件傳輸,資源共享還有很大的缺陷。技術(shù)無(wú)論是從理論上或?qū)嵺`上都還不夠完善。文件傳輸系統(tǒng)由于比擬復(fù)雜,可變因素較多,平安性低,因此開(kāi)展還不成熟。但是隨著科學(xué)技術(shù)的開(kāi)展,各種以局域網(wǎng)為單位的文件傳輸系統(tǒng)已經(jīng)進(jìn)入穩(wěn)健開(kāi)展期,比方說(shuō)市面上比擬普遍使用的 QQ、UC、飛鴿傳書(shū)等以內(nèi)部網(wǎng)絡(luò)為中心的資源共享系統(tǒng)也即將進(jìn)入高速開(kāi)展期。在國(guó)內(nèi),隨著企業(yè)資源管理的標(biāo)準(zhǔn)化和規(guī)模的不斷擴(kuò)大,企業(yè)的計(jì)算機(jī)資源管理將不僅僅停留在依靠硬件或者Internet 網(wǎng)絡(luò)獲取,而且將會(huì)向著平安的內(nèi)部網(wǎng)絡(luò)化資源管理方式邁進(jìn)。1.31.3 課題研
13、究的意義課題研究的意義隨著網(wǎng)絡(luò)通信技術(shù)的開(kāi)展與用戶需求日益多樣化,現(xiàn)代局域網(wǎng)絡(luò)正處在變革與開(kāi)展之中,本課題的主要目的之一是為了更清晰地培養(yǎng)學(xué)生掌握科學(xué)研究方法的能力和使學(xué)生迅速體會(huì)文件傳輸系統(tǒng)的研發(fā)過(guò)程?;诰钟蚓W(wǎng)的文件傳輸系統(tǒng)能夠讓家庭網(wǎng)絡(luò)以及各個(gè)企業(yè)等局域網(wǎng)對(duì)內(nèi)部資料有一個(gè)快捷,準(zhǔn)確,平安的共享。特別是對(duì)如今較大系統(tǒng)研發(fā)的模塊分工合作得到了絕對(duì)保密性,從而使各項(xiàng)工作有方案、更科學(xué)的進(jìn)行及順利完成,使企業(yè)的辦事效率得到顯著提高。文件傳輸系統(tǒng)主要功能是自動(dòng)獲取局域網(wǎng)內(nèi)用戶的主機(jī)名,IP 地址以及工作組名字,最終以 C/S 模式通過(guò) TCP/IP 協(xié)議實(shí)現(xiàn)點(diǎn)到點(diǎn)文件傳輸功能。本系統(tǒng)既鍛煉了我們的
14、實(shí)際動(dòng)手能力,使我們將大學(xué)四年所學(xué)的理論知識(shí)與實(shí)際開(kāi)發(fā)相結(jié)合,又引導(dǎo)我們進(jìn)行了一次模擬實(shí)際產(chǎn)品的開(kāi)發(fā),對(duì)于我們以后工作能力的培養(yǎng)具有重要的意義。 2 2理論根底理論根底2.12.1 TCP/IPTCP/IP 點(diǎn)對(duì)點(diǎn)協(xié)議技術(shù)點(diǎn)對(duì)點(diǎn)協(xié)議技術(shù)系統(tǒng)的文件傳輸功能主要依賴(lài)于建立客戶端與效勞器之間點(diǎn)對(duì)點(diǎn)的的連接后實(shí)現(xiàn)。所以就得與TCP/IP協(xié)議協(xié)合。TCP/IP協(xié)議(Transmission Control Protocol/Internet Protocol)叫做傳輸控制/網(wǎng)際協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議,這個(gè)協(xié)議是Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的根底。TCP/IP是網(wǎng)絡(luò)中使用的根本通信協(xié)議。雖然從名字上看TC
15、P/IP包括兩個(gè)協(xié)議,傳輸控制協(xié)議(TCP)和網(wǎng)際協(xié)議(IP),但TCP/IP實(shí)際上是一組協(xié)議,只是TCP協(xié)議處于運(yùn)輸層,它能夠確保文件準(zhǔn)確的傳送;而IP協(xié)議處于網(wǎng)絡(luò)層,它標(biāo)識(shí)了處于網(wǎng)絡(luò)中任意主機(jī)的唯一身份。TCP協(xié)議和IP協(xié)議是保證數(shù)據(jù)完整傳輸?shù)膬蓚€(gè)根本的重要協(xié)議。通常說(shuō)TCP/IP是Internet協(xié)議族,而不單單是TCP和IP。采用TCP/IP詳解的原因:第一,局域網(wǎng)內(nèi)主機(jī)之間的是依靠IP地址進(jìn)行標(biāo)識(shí)。本設(shè)計(jì)要實(shí)現(xiàn)文件及文件夾的傳輸就需要以IP地址為傳送根底進(jìn)行; 第二,新用戶上線后需要向局域網(wǎng)內(nèi)所有用戶播送自己的主機(jī)信息使網(wǎng)內(nèi)主機(jī)得到本機(jī)的IP地址等。需要用到與TCP/IP相對(duì)的UDP
16、協(xié)議。2.22.2 C/SC/S 架構(gòu)的架構(gòu)的 DELPHIDELPHI 程序設(shè)計(jì)技術(shù)程序設(shè)計(jì)技術(shù)本系統(tǒng)的開(kāi)發(fā)主要采用 C/S 結(jié)構(gòu)。所謂 C/S Client/Server結(jié)構(gòu),即大家熟知的客戶機(jī)和效勞器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過(guò)它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將信息交互任務(wù)合理分配到 Client 端和 Server 端來(lái)實(shí)現(xiàn),降低了系統(tǒng)文件傳輸過(guò)程中的開(kāi)銷(xiāo)。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是Client/Server 形式的兩層結(jié)構(gòu)。傳統(tǒng)的 CS 體系結(jié)構(gòu)雖然采用的是開(kāi)放模式,但這只是系統(tǒng)開(kāi)發(fā)一級(jí)的開(kāi)放性,在特定的應(yīng)用中無(wú)論是 Client 端還是Server 端都還需要特定的軟件支持。
17、由于沒(méi)能提供用戶真正期望的開(kāi)放環(huán)境,C/S 結(jié)構(gòu)的軟件需要針對(duì)不同的操作系統(tǒng)系統(tǒng)開(kāi)發(fā)不同版本的軟件,加之產(chǎn)品的更新?lián)Q代十分快,已經(jīng)很難適應(yīng)百臺(tái)電腦以上局域網(wǎng)用戶同時(shí)使用。 Request ResponseRequest Response Request Response . . . . Request . Response圖 1 客戶機(jī)/效勞器通訊結(jié)構(gòu)文件傳輸系統(tǒng)同時(shí)采用了 Delphi 網(wǎng)絡(luò)組件編程技術(shù)。Delphi 是美國(guó)BORLAND 公司推出的功能強(qiáng)大的應(yīng)用程序開(kāi)發(fā)工具。它具有簡(jiǎn)單、高效、功能強(qiáng)大的特點(diǎn)。它可是眾多程序員至愛(ài)的編程工具。Delphi 具有很多特性:基于窗體和面向?qū)ο蟮姆?/p>
18、法,高速的編譯器,與 Windows 編程緊密結(jié)合,強(qiáng)大而成熟的組件技術(shù)。而且其重要的還有 Object Pascal 語(yǔ)言,它是一切的根本。 Object Pascal 語(yǔ)言是在 Pascal 語(yǔ)言的根底上開(kāi)展起來(lái)的,簡(jiǎn)單易學(xué)。Delphi提供了各種開(kāi)發(fā)工具,包括集成環(huán)境、圖像編輯Image Editor ,以及各種開(kāi)發(fā)可視化軟件的應(yīng)用程序,如 DesktopDataBase Expert 等。除此之外,還允許用戶掛接其它的應(yīng)用程序開(kāi)發(fā)工具,如 Borland 公司的資源編輯器Resourse Workshop 。DELPHI 是可視化應(yīng)用編程開(kāi)發(fā)環(huán)境,可重用性面向?qū)ο缶幊陶Z(yǔ)言,快速編譯器能
19、夠有效快速建立 WINDOWS 應(yīng)用程序,快速簡(jiǎn)化 WINDOWS 與瀏覽器客戶,WEB 效勞器以及中間件等開(kāi)發(fā)之外,同時(shí)也支持基于 WEB 效勞的Microsoft,.net, Sun one 體系,而且提供應(yīng) WEB 開(kāi)發(fā)者需要的可伸縮性和可靠性。用戶可以開(kāi)發(fā)支持 WEB 效勞特性的效勞器端和客戶端應(yīng)用,而這一切都是通過(guò)一套高度集成的可視化開(kāi)發(fā)工具,先進(jìn)的編譯技術(shù)和可重用的組件完成。2.32.3 SOCKETSOCKET 網(wǎng)絡(luò)程序設(shè)計(jì)技術(shù)網(wǎng)絡(luò)程序設(shè)計(jì)技術(shù)文件傳輸系統(tǒng)得以實(shí)現(xiàn)的根本在于建立有效的連接以及是否存在文件傳輸載體。所謂 Socket 通常也稱(chēng)作套接字,用于描述 IP 地址和端口,s
20、ocket 類(lèi)表現(xiàn)了客戶端套接字,它是屬于兩臺(tái)計(jì)算機(jī)的兩個(gè) TCP 通訊端口之間的通訊通道。在網(wǎng)絡(luò)編程中,客戶端使用 Socket 對(duì)網(wǎng)絡(luò)上某一個(gè)效勞器的某一個(gè)端口發(fā) 效勞器主機(jī)客戶機(jī) A客戶機(jī) B客戶機(jī) C客戶機(jī) N出連接請(qǐng)求,一旦連接成功,翻開(kāi)會(huì)話;會(huì)話完成后,關(guān)閉 Socket??蛻舳瞬恍枰付ǚ_(kāi)的端口。效勞器使用 Socket 監(jiān)聽(tīng)指定的端口,端口可以隨意指定,等待客戶連接請(qǐng)求,客戶連接后,會(huì)話產(chǎn)生;在完成會(huì)話后,關(guān)閉連接。3 3系統(tǒng)需求分析系統(tǒng)需求分析3.13.1 現(xiàn)行業(yè)務(wù)系統(tǒng)描述現(xiàn)行業(yè)務(wù)系統(tǒng)描述目前各種文件資源交流的主要方式可以分為三種:1通過(guò)局域網(wǎng)內(nèi)主機(jī)之間以文件共享后再經(jīng)過(guò)復(fù)
21、制,粘貼方式實(shí)現(xiàn)。 2依靠可移動(dòng)磁盤(pán)的兩次信息轉(zhuǎn)移實(shí)現(xiàn)。 3通過(guò) Internet 郵件方式實(shí)現(xiàn)。此三種方法并非不可行,但它們都需要花費(fèi)較長(zhǎng)的時(shí)間以及平安性也得不到保證,工作效率將在很大程度上受到限制。如果通過(guò)局域網(wǎng)內(nèi)主機(jī)之間復(fù)制粘貼來(lái)實(shí)現(xiàn)文件資源共享,將浪費(fèi)大量的網(wǎng)絡(luò)帶寬,極大程度上影響了網(wǎng)內(nèi)用戶的工作效率,甚至導(dǎo)致用戶不能正常工作;如果依靠移動(dòng)磁盤(pán)實(shí)現(xiàn)文件的共享,將花費(fèi)大量的金錢(qián),而文件較大移動(dòng)磁盤(pán)容量缺乏的情況下會(huì)令人極為頭疼,何況移動(dòng)磁盤(pán)是病毒傳播的重要途徑;如果通過(guò) Internet 郵件方式實(shí)現(xiàn),用戶需要接入 Internet 效勞器,這種方式對(duì)遠(yuǎn)程效勞器有非常大的依賴(lài)性,即使 1
22、KB 的文件都要經(jīng)歷極度繁瑣的路徑,不能徹底實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的即時(shí)交流,文件較大的情況下就不言而喻了。最重要的是,在如今病毒黑客橫行的網(wǎng)絡(luò)世界中,信息的平安性也得不到保證。 綜上所述,依靠 Internet 網(wǎng)絡(luò)等方式實(shí)現(xiàn)文件資源交互的準(zhǔn)確性,快速性及平安性遠(yuǎn)達(dá)不到理想的要求。3.23.2 現(xiàn)行系統(tǒng)存在的主要問(wèn)題分析現(xiàn)行系統(tǒng)存在的主要問(wèn)題分析針對(duì)企業(yè)來(lái)說(shuō),提高工作效率是企業(yè)的一個(gè)重心;降低本錢(qián)是企業(yè)贏取最大利益的重要方式;保證信息平安卻是可能影響企業(yè)生死存亡的關(guān)鍵。企業(yè)需要對(duì)各種因素有足夠深刻的認(rèn)識(shí)才可能實(shí)現(xiàn)最終目標(biāo)-盈利。而傳統(tǒng)的文件資源交互方式卻存在很多的問(wèn)題,大致可以分為:一、不能有效地降低文
23、件交互本錢(qián);二、文件交換過(guò)程過(guò)于繁瑣;三、內(nèi)部機(jī)密資料得不到平安保證;四、文件交互的準(zhǔn)確性得不到更本保證。3.33.3 提出解決方案提出解決方案4 4系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)4.14.1 系統(tǒng)總體架構(gòu)系統(tǒng)總體架構(gòu)本系統(tǒng)的設(shè)計(jì)過(guò)程主要分為兩局部:第一局部:系統(tǒng)界面的設(shè)計(jì)以及獲取局域網(wǎng)內(nèi)所有在線用戶的主機(jī)名,IP地址以及工作組名。使網(wǎng)內(nèi)所有用戶都能夠獲取其他用戶信息。第二局部:文件傳輸是本設(shè)計(jì)功能實(shí)現(xiàn)的核心。系統(tǒng)采用 C/S 架構(gòu)將系統(tǒng)運(yùn)行載體分為兩個(gè)局部:客戶端與效勞器端。文件傳輸需要建立有效的連接后,通過(guò) TCP/IP 協(xié)議實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的文件傳輸。通信雙方是通過(guò)三次握手建立Socket 連接,實(shí)現(xiàn)文件傳
24、輸,最后關(guān)閉套節(jié)字連接。文件傳輸?shù)恼麄€(gè)流程圖如下:TCP/IP3 次握手SOCKET 流 三次握手圖 2 文件傳輸系統(tǒng)框架圖4.24.2 系統(tǒng)界面設(shè)計(jì)系統(tǒng)界面設(shè)計(jì)4.2.1界面設(shè)計(jì)界面設(shè)計(jì)4.2.2用戶信息用戶信息用戶列表建立以后,將局域網(wǎng)內(nèi)所有在線用戶的主機(jī)名,主機(jī) IP 地址以及工作組名顯示于列表中。方法是首先確定用戶主機(jī)是上線信息,返回信息,握手信息還是離線信息。這里對(duì)他們分別設(shè)置了一個(gè)信息發(fā)送的頭信息,分別設(shè)置為:LOGIN,HAND 以及 LOGOUT。如果新用戶上線,它就向局域網(wǎng)以 LOGIN 為頭信息播送本機(jī)的主機(jī)名,IP 地址以及工作組。局域網(wǎng)內(nèi)所有在線主機(jī)收到該播送信息以后將
25、新上線的主機(jī)名,端口,IP 地址以及工作組信息添加到自己的在線用戶列表并都以 HAND 為頭信息向局域網(wǎng)播送本機(jī)的握手信息;當(dāng)包括剛上線主機(jī)在內(nèi)的局域網(wǎng)所有主機(jī)收到這個(gè)握手信息以后線判斷自己的在線用戶列表中是否存在這個(gè)主機(jī)播送的主機(jī)信息,如果不存在就說(shuō)明它是剛上線主機(jī),最后將這個(gè)信息添加到自己在線列表,否那么就不加;當(dāng)用戶下線的時(shí)候也將自己的信息以 LOGOUT 為頭信息播送給局域網(wǎng),其他在線用戶收到這個(gè)消息以后將其主機(jī)信息從本地在線用戶列表刪除。其局部的源代碼分別如下:客戶端主機(jī)效勞器端主機(jī)套節(jié)字連接請(qǐng)求連接響應(yīng)寫(xiě)入文件流接收文件流并保存斷開(kāi)連接斷開(kāi)連接響應(yīng)procedure TForm1.
26、FormCreate(Sender: TObject); /新用戶上線 以 LOGIN 為頭信息var wsadata:twsadata; myinfobuf:array0.1023of char; /本機(jī)信息 pmyname:array0.1023of char; /本機(jī)名wList,clist: TStringList ; i,j:integer;begin mainhide; /把程序圖標(biāo)顯示在系統(tǒng)托盤(pán)里邊 if wsastartup($101,wsadata)0 then exit; /獲取本機(jī)名 gethostname(pmyname,sizeof(pmyname); /獲取主機(jī)名
27、myname:=strpas(pmyname);/得到主機(jī)名 try wlist:=tstringlist.Create; clist:=tstringlist.Create; GetServerList(wList); /獲取本機(jī) IP for i:=0 to wlist.Count-1 do begin getusers(wlist.Stringsi,clist);/得到用戶名 for j:=0 to clist.Count-1 do begin if (clist.Stringsj=uppercase(myname) or (clist.Stringsj=myname) then beg
28、in myworkgroup:=wlist.Stringsi; /獲本機(jī)工作組 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(ip,name,workgroup:string;port:integer):string; /向好友發(fā)握手信息 var minfobu
29、f: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); /用戶離線 以 LOGINOUT 為頭信息var mylogoutbuf:array0.1023of char; mylogoutinfo:string;beg
30、in mylogoutinfo:=format(%-6s%-255s,LOGOUT,myname); strpcopy(mylogoutbuf,mylogoutinfo); client.Broadcast(mylogoutbuf,9000); / 播送自己離線信息 Application.Terminate; /銷(xiāo)毀線程end;4.34.3 系統(tǒng)功能模塊設(shè)計(jì)系統(tǒng)功能模塊設(shè)計(jì)4.3.1 獲取用戶信息獲取用戶信息本局部主要是顯示用戶列表中在線用戶的主機(jī)名,主機(jī)的 IP 地址以及工作組名三局部,代碼分別進(jìn)行介紹如下:獲取局域網(wǎng)內(nèi)用戶名的源代碼如下:Function tform1.GetUsers(
31、 GroupName : string;List : TStringList) : Boolean; /獲取工作組的計(jì)算機(jī)名稱(chēng)type TNetResourceArray = TNetResource;VarNetResource : TNetResource;Buf : Pointer;Count,BufSize,Res : DWord;Ind : Integer;lphEnum : THandle;Temp : TNetResourceArray;TmpStr:String;BeginResult := False;FillChar(NetResource, SizeOf(NetResou
32、rce), 0);/初始化網(wǎng)絡(luò)層次信息NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;/類(lèi)型為效勞器工作組/ NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;NetResource.dwScope := RESOURCETYPE_DISK;/列舉文件資源信Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, NetResource,lphEnum);If Res NO_ER
33、ROR Then Exit; /執(zhí)行失敗While True Do/列舉指定工作組的網(wǎng)絡(luò)資源BeginCount := $FFFFFFFF;/不限資源數(shù)目BufSize := 8192;/緩沖區(qū)大小設(shè)置為 8KGetMem(Buf, BufSize);/申請(qǐng)內(nèi)存,用于獲取工作組信息/獲取計(jì)算機(jī)名稱(chēng) Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);獲取局域網(wǎng)的用戶 IP 地址以及添加用戶信息的源代碼如下:If Res = ERROR_NO_MORE_ITEMS Then break;/資源列舉完畢 If (Res NO
34、_ERROR) then Exit; /執(zhí)行失敗 Temp := TNetResourceArray(Buf); For Ind := 0 to Count - 1 do/列舉工作組的計(jì)算機(jī)名稱(chēng) Begin tmpStr:=Temp.lpRemoteName;/獲取工作組的計(jì)算機(jī)名稱(chēng) Delete(tmpstr,1,2); list.Add(tmpstr); Inc(Temp); End; End; Res := WNetCloseEnum(lphEnum);/關(guān)閉一次列舉 If Res NO_ERROR Then exit;/執(zhí)行失敗Result := True; FreeMem(Buf);
35、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:textfile;begin ZeroMemory(readbuf0,2030); adata.Read(readbuf,sizeof(readbuf); msg:=Trim(Strin
36、g(Pchar(Readbuf0); /memo1.Lines.Add(msg); head:=trim(copy(msg,1,headlen); if head=LOGIN THEN /添加對(duì)方 IP 1.返回對(duì)方 IP 2. 發(fā)出 Hand 握手信息 begin recvip:=abinding.PeerIP; recvport:=9000;獲取局域網(wǎng)的工作組名的源代碼如下: / memo1.Lines.Add(login recv+recvip+inttostr(recvport); recvname:=copy(msg,headlen+1,namelen); recvworkgroup
37、:=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); /返回對(duì)方 IP /端口等信息 strpcopy(minfobuf,minfo); server.SendBuffer(recvip,recvport,minfobuf,sizeof(minfobuf); end;
38、if head=REVLOGthen /添加對(duì)方返回的自己的 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 /處理握手信息 添加對(duì)方 ip 返回對(duì)方 ip BEgin / memo1.Lines.Add(hand recv); RECVNAME:=COPY(msg,headlen+1,namelen); recvworkgrou
39、p:=copy(msg,headlen+namelen+1,workglen); recvip:=abinding.PeerIP; recvport:=9000; recvp2pdata(recvip,recvname,recvworkgroup,recvport); END;if head=LOGOUTthen /處理 logout delete 其 ip begin recvname:=copy(msg,headlen+1,namelen); if mynamerecvname then deleteuser(recvname); end;Function tform1.GetServer
40、List( var List : TStringList ) : Boolean; /獲取效勞列表Var NetResource : TNetResource; /初始化網(wǎng)絡(luò)層次信息Buf : Pointer;Count,BufSize,Res : DWORD;lphEnum : THandle;p : TNetResourceArray;i,j : SmallInt;NetworkTypeList : TList; /返回局域網(wǎng)中的工作組類(lèi)型BeginResult := False;NetworkTypeList := TList.Create; /獲取局域網(wǎng)中的工作組信息List.Clea
41、r;/獲取整個(gè)網(wǎng)絡(luò)中的文件資源的句柄,lphEnum 為返回名柄Res:=WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_CONTAINER, Nil,lphEnum); /得到網(wǎng)絡(luò)中的所有工作組的名稱(chēng)If Res NO_ERROR Then exit;/Raise Exception(Res);/執(zhí)行失敗/獲取整個(gè)網(wǎng)絡(luò)中的網(wǎng)絡(luò)類(lèi)型信息Count := $FFFFFFFF;/不限資源數(shù)目BufSize := 8192;/緩沖區(qū)大小設(shè)置為 8KGetMem(Buf, BufSize);/申請(qǐng)內(nèi)存,用于獲取工作組
42、信息Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize); /獲取計(jì)算機(jī)名稱(chēng)If ( Res = ERROR_NO_MORE_ITEMS ) /資源列舉完畢or (Res NO_ERROR) /執(zhí)行失敗then break;P := TNetResourceArray(Buf);For I := 0 To Count - 1 Do /列舉各個(gè)工作組的信息BeginList.Add( StrPAS( P.lpRemoteName ) ;/取得一個(gè)工作組的名稱(chēng)Inc(P);End;End;Res := WNetCloseEnu
43、m(lphEnum);/關(guān)閉一次列舉If Res NO_ERROR Then break;/執(zhí)行失敗End;Result := True;FreeMem(Buf);NetworkTypeList.Destroy;End; 4.3.2 局域網(wǎng)內(nèi)文件傳輸局域網(wǎng)內(nèi)文件傳輸文件傳輸實(shí)現(xiàn)之前,需要獲取在線用戶列表中的用戶信息。所以系統(tǒng)設(shè)置一個(gè)“刷新按鈕,當(dāng)用戶點(diǎn)擊 “刷新后將更新界面的用戶列表中所有在線用戶 的主機(jī)名,主機(jī)IP地址和工作組名。并顯示在線人數(shù)。源代碼如下:文件以及文件夾傳輸功能是本設(shè)計(jì)能夠?qū)崿F(xiàn)的理論核心。系統(tǒng)實(shí)現(xiàn)主要依靠發(fā)送端與接收端建立有效的連接后,客戶端不斷地向SOCKET寫(xiě)入文件流,
44、效勞器端不斷接受來(lái)自客戶端的SOCKET文件流。直到文件傳輸完畢關(guān)閉套節(jié)字連接并釋放空間。文件傳輸?shù)恼麄€(gè)過(guò)程可以分別表示為:客戶端和效勞器端。1客戶端連接并發(fā)送功能:客戶端點(diǎn)擊文件發(fā)送按鈕以后,系統(tǒng)首先判斷是否選擇文件接受者。如果沒(méi)有選擇就提示用戶選擇接收者。然后以組件opendialog1.Execute翻開(kāi)傳輸文件。建立文件流并執(zhí)行e。在e中寫(xiě)入接收主機(jī)的IP及端口號(hào)。向效勞器發(fā)送連接請(qǐng)求。連接成功后發(fā)送文件流。代碼依次如下:Procedure TForm1. BitBtn2Click(Sender: TObject); /發(fā)送按鈕 文件傳輸事件var filename:string;te
45、mpItem:TListItem;begintempItem:=UserList.Selected; /獲取文件接收者if (not assigned(tempItem) or (tempItem=nil) thenbegin MessageBox(self.Handle ,請(qǐng)選擇消息接收者!,提示,0); exit; end;if opendialog1.Execute then /如果文件翻開(kāi)。 。 。 beginprocedure TForm1.BitBtn1Click(Sender: TObject); /顯示在線人數(shù)var f:textfile;begin Label2.Captio
46、n:=INTTOSTR(USERLIST.Items.Count);end; filename:=opendialog1.FileName; /獲取文件名 TSendThread.createThread(tempitem.SubItems.Strings1,extractfilename(filename); /創(chuàng)立線程并立刻執(zhí)行 end;end;文件翻開(kāi)后客戶端調(diào)用函數(shù)建立文件傳輸流。此函數(shù)的源代碼如下: 文件流建立后由inherited create(false)提示系統(tǒng)自動(dòng)執(zhí)行函數(shù)發(fā)送文件。碼如下:onstructor TSendThread.createThread(IP,FileN
47、ame:string); /創(chuàng)立文件線程begin Fip:=IP; FFilename:=filename; FreeonTerminate:=true; /完成后自動(dòng)關(guān)閉 inherited create(false); /表示創(chuàng)立線程后立刻執(zhí)行end;procedure TSendThread.Execute; /運(yùn)行線程var socket:tidtcpclient; /定義客戶端套節(jié)字 fs:tfilestream; /定義文件流begintry socket:=tidtcpclient.Create(nil); /創(chuàng)立客戶端套界字 socket.Host:=Fip; /寫(xiě)入 IPs
48、ocket.Connect(); /進(jìn)行套節(jié)字連接 if socket.Connected then fs:=tfilestream.Create(FFileName,fmopenread); /創(chuàng)立文件流和文件建立關(guān)聯(lián)設(shè)置 /參數(shù) fmopenread=file mode openread try socket.WriteLn(TRANSFILE); /寫(xiě)入套接字類(lèi)型為 TRANSFILE socket.WriteLn(FFileName); /寫(xiě)入傳輸?shù)奈募?socket.WriteLn(inttostr(fs.Size); socket.WriteStream(fs,false,fal
49、se,fs.Size); /寫(xiě)入文件 finally fs.Free; /釋放文件流 end; getmem(hostname,255); /post the hostname /分配監(jiān)視器內(nèi)存 zeromemory(hostname,255);/清空內(nèi)存 move(myname1,hostname,length(myName);/獲取傳輸文件名 postmessage(TranSuVisorform.handle,TransferSupervisorTwo,integer(hostname),0); getmem(pname,255); zeromemory(pname,255); /pos
50、t fname and size move(FFileName1,pname,length(FFileName); postmessage(TranSuVisorform.handle,TransferSupervisor,integer(pname),lSize); end;文件傳輸完畢以后斷開(kāi)SOCKET連接并釋放套節(jié)字空間。2效勞器端響應(yīng)功能:當(dāng)效勞器收到來(lái)自客戶端文件傳輸連接請(qǐng)求后,對(duì)其進(jìn)行連接響應(yīng)建立連接。連接建立后得到文件的根本信息,進(jìn)行自動(dòng)初始化并分配臨時(shí)空間。如果文件大小為OK就認(rèn)為是文件傳輸完畢自動(dòng)斷開(kāi)連接。否那么接收文件開(kāi)始。當(dāng)傳輸完畢后斷開(kāi)連接。其源代碼如下:proced
51、ure 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:String;begin with athread.Connection do begin cmd:=trim(readln); / memo1.Lines.Add(cmd); if cmd=T
52、RANSFILEthen begin GetMem(filename,255); zeromemory(filename,255); 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);
53、readstream(fs,lsize);fs.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; /本地文件名wr
54、iteln(BEGIN); /發(fā)送開(kāi)始信號(hào)lsize:=strtointdef(readln,0); /接收文件大小if lsize=0 thenbegindisconnect;exit;end; /如果發(fā)過(guò)來(lái)的文件是 0KB 的 會(huì)收不到 所以 Deletefs:=TFileStream.Create(targetname,fmcreate);readstream(fs,lsize);fs.Free;/ openrevfilepath:=trim(strpas(localroot)+trim(ldir0);end;end;end;end;效勞器端將收到的文件流重組以后通過(guò)Delphi組件Sa
55、veDialog設(shè)置保存路徑并保存到本地文件夾,其源代碼如下:4.3.3 局域網(wǎng)內(nèi)文件夾傳輸局域網(wǎng)內(nèi)文件夾傳輸在人們的日常生活中,很多時(shí)候不僅僅需要進(jìn)行單個(gè)文件的共享,而是需要進(jìn)成百上千個(gè)文件組成的文件夾的共享。但是用戶不可能進(jìn)行一次又一次的單文件的傳送,不但浪費(fèi)時(shí)間,而且很不值得。所以這個(gè)時(shí)候我們需要對(duì)整個(gè)文件夾都進(jìn)行傳輸。這樣就可以防止一個(gè)文件夾中的大量文件重復(fù)進(jìn)行屢次單文件的傳輸,很大程度上減少了用戶的工作量,從而有效地提高工作效率。其過(guò)程同樣的分為效勞器與客戶口端兩局部:首先是客戶口端向效勞器發(fā)送連接請(qǐng)求,效勞器響應(yīng)后建立連接實(shí)現(xiàn)文件傳輸。具體過(guò)程如下:1客戶端請(qǐng)求建立連接并發(fā)送文件夾
56、用戶選擇文件夾接收者后點(diǎn)擊“文件夾傳輸按鈕。如果用戶忘記選擇文件接收者,系統(tǒng)彈出提示框“請(qǐng)選擇消息接收者,然后翻開(kāi)本地文件路徑,并將本地文件夾路徑得出來(lái)。Procedure tform1.UMRcvfile(var msg:tmessage); /保存文件var filename:pchar;beginfilename:=pchar(msg.WParam); savedialog1.FileName:=string(filename); /保存文件名if savedialog1.Execute thenmove (SaveDialog1.filename1,filename,length(Sa
57、veDialog1.FileName); end;procedure TForm1.Bitbtn3Click(Sender: TObject);var dir:string; tempItem:TListItem; Rdir:stringarray; i:integer;begin POSI:=0; tempItem:=UserList.Selected; if (not assigned(tempItem) or (tempItem=nil) then begin MessageBox(self.Handle ,請(qǐng)選擇消息接收者!,提示,0); exit; end; toip:=trim(t
58、empitem.SubItems.Strings1); Dir := ; if SelectDirectory(目錄文件夾,我的電腦,Dir)=true then begin rdir:=split(dir,); remotefilename:=; for i:=0 to high(rdir)-1 dobegin remotefilename:=remotefilename+rdiri; remotefilename:=remotefilename+; end;dir:=dir+; tsendfilethread.createThread(toip,dir); end;end;文件夾選取以后調(diào)
59、用 tsendfilethread.createThread(toip,dir)建立文件夾傳輸流,其源代碼如下:文件夾傳輸流建立以后,由函數(shù) inherited create(false)提示立刻執(zhí)行文件傳輸流函數(shù)。此局部的主要功能是向套節(jié)字寫(xiě)入傳輸文件的目標(biāo) IP 地址等信息,如果連接成功,寫(xiě)入文件傳輸信息 csocket.WriteLn(TRANSDIR)以及調(diào)用函數(shù) putdir(Flocaldir)寫(xiě)入文件流。其源代碼分別如下:constructor TsendFilethread.createThread(IP:string;localdir:string);begin FIP:=I
60、P; Flocaldir:=localdir; / Fremotename:=remotename; / Fcount:=count; freeonterminate:=true; inherited create(false);end;procedure TsendFilethread.Execute;var csocket:tidtcpclient; fs:tfilestream;begin try csocket:=tidtcpclient.Create(nil); csocket.Host:=fip; csocket.Port:=9923; csocket.Connect(); if
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)押題練習(xí)試題A卷含答案
- 小學(xué)重點(diǎn)考試試題及答案
- AI智慧城市建設(shè)與城市管理優(yōu)化研究
- 辦公系統(tǒng)使用簡(jiǎn)明教程與操作手冊(cè)
- 個(gè)人辦公用品采購(gòu)合同規(guī)范
- 現(xiàn)代物理學(xué)理論前沿探討閱讀題集
- 數(shù)字化圖書(shū)館建設(shè)協(xié)議
- 中醫(yī)藥兒童知識(shí)培訓(xùn)課件
- 馬匹買(mǎi)賣(mài)合同
- 物理光學(xué)及量子力學(xué)考點(diǎn)復(fù)習(xí)題集
- 互聯(lián)網(wǎng)接入服務(wù)提供商服務(wù)承諾
- 2024年全國(guó)中學(xué)生生物學(xué)聯(lián)賽試題含答案
- 城市綠化景觀設(shè)施安裝與維護(hù)合同
- 解除凍結(jié)及撤銷(xiāo)納入失信和限高令申請(qǐng)書(shū)(文本)
- 2024年河北省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 英語(yǔ)語(yǔ)法-形容詞和副詞-復(fù)習(xí)資料
- 數(shù)字校園網(wǎng)絡(luò)設(shè)施調(diào)查 課件 2024-2025學(xué)年冀教版(2024)初中信息科技七年級(jí)上冊(cè)
- 美食街道策劃方案
- 河北醫(yī)科大學(xué)第二醫(yī)院招聘工作人員真題
- 《寧夏閩寧鎮(zhèn):昔日干沙灘今日金沙灘》教案- 2023-2024學(xué)年高教版(2023)中職語(yǔ)文職業(yè)模塊
- 數(shù)學(xué)家華羅庚課件
評(píng)論
0/150
提交評(píng)論