版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、a a 公司局域網(wǎng)文件傳輸存在的問題及對(duì)策公司局域網(wǎng)文件傳輸存在的問題及對(duì)策 摘摘 要要 隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)通信給人類文明帶來了翻天覆地的變 化。很多情況下,人們的日常工作需要借助文件傳輸來完成。但大多數(shù)文件傳 輸功能都需要借助移動(dòng)磁盤等硬件設(shè)備或 internet 上的服務(wù)器才能實(shí)現(xiàn)。這就 給那些具有大規(guī)模內(nèi)部網(wǎng)絡(luò)的用戶造成了許多問題,如浪費(fèi)資金、浪費(fèi)網(wǎng)絡(luò)資 源、病毒入侵、降低了工作效率等。為了方便局域網(wǎng)內(nèi)主機(jī)的資源共享,需要 開發(fā)一個(gè)基于局域網(wǎng)的文件傳輸工具,在內(nèi)部網(wǎng)絡(luò)中實(shí)現(xiàn)文件交換。 基于局域網(wǎng)的文件傳輸系統(tǒng)的設(shè)計(jì)選用 delphi 為開發(fā)工具,以 c/s 模式 通過建立
2、socket 連接后實(shí)現(xiàn)局域網(wǎng)快速,準(zhǔn)確,安全的點(diǎn)對(duì)點(diǎn)文件以及文件夾 傳輸功能。本系統(tǒng)能夠促進(jìn)局域網(wǎng)內(nèi)用戶之間的文件資源共享,滿足主機(jī)之間 信息交流,確保文件及文件夾傳輸安全性,有效地提高工作效率。 設(shè)計(jì)共分為五大模塊,分別為:一、介紹選題背景及意義和國內(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 連接
3、the design and implementation of file transfer system based on lan abstract along 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 fr
4、om 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 these to have the large-scale internal network user to create many problems, like the waste fund, the wa
5、ste 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 the local area network file transfer tool, realizes the document exchange in internal network. the design
6、 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 security files and folders transmission functions. the system can contribute to lan users to share file reso
7、urces 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 altogether, including: first, introduction selected topic background and significance and domestic and
8、 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 technology; third, carries on the demand to the current local area network file transfer to analyze and to
9、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 result. key words: c/s structure; network communication module; point-to-point; socket connection. 目目 錄錄 論
10、文總頁數(shù):26 頁 1引言.1 1.1選題背景.1 1.2國內(nèi)外研究現(xiàn)狀.1 1.3課題研究的意義.1 2理論基礎(chǔ).2 2.1tcp/ip 點(diǎn)對(duì)點(diǎn)協(xié)議技術(shù) .2 2.2c/s 架構(gòu)的 delphi 程序設(shè)計(jì)技術(shù) .2 2.3socket 網(wǎng)絡(luò)程序設(shè)計(jì)技術(shù) .3 3系統(tǒng)需求分析.4 3.1現(xiàn)行業(yè)務(wù)系統(tǒng)描述.4 3.2現(xiàn)行系統(tǒng)存在的主要問題分析.4 3.3提出解決方案.4 4系統(tǒng)設(shè)計(jì).5 4.1系統(tǒng)總體架構(gòu).5 4.2系統(tǒng)界面設(shè)計(jì).6 4.2.1界面設(shè)計(jì).6 4.2.2用戶信息.7 4.3系統(tǒng)功能模塊設(shè)計(jì).9 4.3.1獲取用戶信息.9 4.3.2局域網(wǎng)內(nèi)文件傳輸.13 4.3.3局域網(wǎng)內(nèi)文件夾傳
11、輸.17 5系統(tǒng)實(shí)施及測(cè)試.22 5.1實(shí)施概況.22 5.2測(cè)試方案.22 5.3測(cè)試結(jié)果.23 參考文獻(xiàn).24 1 1引言引言 1.11.1 選題背景選題背景 當(dāng)今世界科學(xué)技術(shù)飛速發(fā)展,尤其以計(jì)算機(jī)通信網(wǎng)絡(luò)為代表的互聯(lián)網(wǎng)技術(shù) 更是日新月異,令人眼花燎亂,目不睱接。在計(jì)算機(jī)與網(wǎng)絡(luò)迅速發(fā)展的今天, 借助于網(wǎng)絡(luò)進(jìn)行信息資源交流給人們帶來了極大的方便。各種文件傳輸系統(tǒng)都 已被廣大用戶接受。比如 qq、uc、internet 郵件等互聯(lián)網(wǎng)中運(yùn)用最為廣泛的文 件傳輸工具,但它們之間的文件傳輸往往對(duì)遠(yuǎn)程服務(wù)器有非常大的依賴性,沒 有徹底實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)安全的文件傳輸。甚至需要花費(fèi)大量的金錢購買各種移動(dòng)磁 盤或
12、者其他局域網(wǎng)內(nèi)連接主機(jī)的硬件設(shè)備。而達(dá)到的效果卻總是因?yàn)閭鬏斝?以及安全威脅而受到很大的限制。在這種形勢(shì)下,開發(fā)一個(gè)功能簡單而實(shí)用, 能在 windows 操作系統(tǒng)中運(yùn)行,并且具有可移植性的局域網(wǎng)內(nèi)文件傳輸工具勢(shì) 在必行。 1.21.2 國內(nèi)外研究現(xiàn)狀國內(nèi)外研究現(xiàn)狀 目前,國內(nèi)外企業(yè)對(duì)局域網(wǎng)的文件傳輸系統(tǒng)認(rèn)識(shí)和使用情況并不好,各個(gè) 企業(yè)單位在局域網(wǎng)內(nèi)實(shí)現(xiàn)文件傳輸,資源共享還有很大的缺陷。技術(shù)無論是從 理論上或?qū)嵺`上都還不夠完善。文件傳輸系統(tǒng)由于比較復(fù)雜,可變因素較多, 安全性低,因此發(fā)展還不成熟。 但是隨著科學(xué)技術(shù)的發(fā)展,各種以局域網(wǎng)為單位的文件傳輸系統(tǒng)已經(jīng)進(jìn)入 穩(wěn)健發(fā)展期,比如說市面上比較
13、普遍使用的 qq、uc、飛鴿傳書等以內(nèi)部網(wǎng)絡(luò)為 中心的資源共享系統(tǒng)也即將進(jìn)入高速發(fā)展期。在國內(nèi),隨著企業(yè)資源管理的規(guī) 范化和規(guī)模的不斷擴(kuò)大,企業(yè)的計(jì)算機(jī)資源管理將不僅僅停留在依靠硬件或者 internet 網(wǎng)絡(luò)獲取,而且將會(huì)向著安全的內(nèi)部網(wǎng)絡(luò)化資源管理方式邁進(jìn)。 1.31.3 課題研究的意義課題研究的意義 隨著網(wǎng)絡(luò)通信技術(shù)的發(fā)展與用戶需求日益多樣化,現(xiàn)代局域網(wǎng)絡(luò)正處在變 革與發(fā)展之中,本課題的主要目的之一是為了更清晰地培養(yǎng)學(xué)生掌握科學(xué)研究 方法的能力和使學(xué)生迅速體會(huì)文件傳輸系統(tǒng)的研發(fā)過程。基于局域網(wǎng)的文件傳 輸系統(tǒng)能夠讓家庭網(wǎng)絡(luò)以及各個(gè)企業(yè)等局域網(wǎng)對(duì)內(nèi)部資料有一個(gè)快捷,準(zhǔn)確,安 全的共享。特別
14、是對(duì)如今較大系統(tǒng)研發(fā)的模塊分工合作得到了絕對(duì)保密性,從 而使各項(xiàng)工作有計(jì)劃、更科學(xué)的進(jìn)行及順利完成,使企業(yè)的辦事效率得到顯著 提高。文件傳輸系統(tǒng)主要功能是自動(dòng)獲取局域網(wǎng)內(nèi)用戶的主機(jī)名,ip 地址以及 工作組名字,最終以 c/s 模式通過 tcp/ip 協(xié)議實(shí)現(xiàn)點(diǎn)到點(diǎn)文件傳輸功能。 本系統(tǒng)既鍛煉了我們的實(shí)際動(dòng)手能力,使我們將大學(xué)四年所學(xué)的理論知識(shí) 與實(shí)際開發(fā)相結(jié)合,又引導(dǎo)我們進(jìn)行了一次模擬實(shí)際產(chǎn)品的開發(fā),對(duì)于我們以 后工作能力的培養(yǎng)具有重要的意義。 2 2理論基礎(chǔ)理論基礎(chǔ) 2.12.1 tcp/iptcp/ip 點(diǎn)對(duì)點(diǎn)協(xié)議技術(shù)點(diǎn)對(duì)點(diǎn)協(xié)議技術(shù) 系統(tǒng)的文件傳輸功能主要依賴于建立客戶端與服務(wù)器之間點(diǎn)對(duì)
15、點(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國際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ)。tcp/ip是網(wǎng)絡(luò)中使用的基本通信協(xié) 議。雖然從名字上看tcp/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é)議。通常說tc
16、p/ip是 internet協(xié)議族,而不單單是tcp和ip。 采用tcp/ip詳解的原因: 第一,局域網(wǎng)內(nèi)主機(jī)之間的是依靠ip地址進(jìn)行標(biāo)識(shí)。本設(shè)計(jì)要實(shí)現(xiàn)文件及 文件夾的傳輸就需要以ip地址為傳送基礎(chǔ)進(jìn)行; 第二,新用戶上線后需要向局域網(wǎng)內(nèi)所有用戶廣播自己的主機(jī)信息使網(wǎng)內(nèi) 主機(jī)得到本機(jī)的ip地址等。需要用到與tcp/ip相對(duì)的udp協(xié)議。 2.22.2 c/sc/s 架構(gòu)的架構(gòu)的 delphidelphi 程序設(shè)計(jì)技術(shù)程序設(shè)計(jì)技術(shù) 本系統(tǒng)的開發(fā)主要采用 c/s 結(jié)構(gòu)。所謂 c/s (client/server)結(jié)構(gòu),即 大家熟知的客戶機(jī)和服務(wù)器結(jié)構(gòu)。它是軟件系統(tǒng)體系結(jié)構(gòu),通過它可以充分利 用兩端
17、硬件環(huán)境的優(yōu)勢(shì),將信息交互任務(wù)合理分配到 client 端和 server 端來 實(shí)現(xiàn),降低了系統(tǒng)文件傳輸過程中的開銷。目前大多數(shù)應(yīng)用軟件系統(tǒng)都是 client/server 形式的兩層結(jié)構(gòu)。傳統(tǒng)的 cs 體系結(jié)構(gòu)雖然采用的是開放模式, 但這只是系統(tǒng)開發(fā)一級(jí)的開放性,在特定的應(yīng)用中無論是 client 端還是 server 端都還需要特定的軟件支持。由于沒能提供用戶真正期望的開放環(huán)境, 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í)使用。 request response request response re
18、quest response . . . . request . response 圖 1 客戶機(jī)/服務(wù)器通訊結(jié)構(gòu) 文件傳輸系統(tǒng)同時(shí)采用了 delphi 網(wǎng)絡(luò)組件編程技術(shù)。delphi 是美國 borland 公司推出的功能強(qiáng)大的應(yīng)用程序開發(fā)工具。它具有簡單、高效、功能 強(qiáng)大的特點(diǎn)。它可是眾多程序員至愛的編程工具。delphi 具有很多特性:基于 窗體和面向?qū)ο蟮姆椒?,高速的編譯器,與 windows 編程緊密結(jié)合,強(qiáng)大而成 熟的組件技術(shù)。而且其重要的還有 object pascal 語言,它是一切的根本。 object pascal 語言是在 pascal 語言的基礎(chǔ)上發(fā)展起來的,簡單易學(xué)。
19、delphi 提供了各種開發(fā)工具,包括集成環(huán)境、圖像編輯(image editor) ,以及各種開 發(fā)可視化軟件的應(yīng)用程序,如 desktopdatabase expert 等。除此之外,還允許 用戶掛接其它的應(yīng)用程序開發(fā)工具,如 borland 公司的資源編輯器(resourse workshop) 。delphi 是可視化應(yīng)用編程開發(fā)環(huán)境,可重用性面向?qū)ο缶幊陶Z言, 快速編譯器能夠有效快速建立 windows 應(yīng)用程序,快速簡化 windows 與瀏覽器 客戶,web 服務(wù)器以及中間件等開發(fā)之外,同時(shí)也支持基于 web 服務(wù)的 microsoft,.net, sun one 體系,而且提供
20、給 web 開發(fā)者需要的可伸縮性和 可靠性。用戶可以開發(fā)支持 web 服務(wù)特性的服務(wù)器端和客戶端應(yīng)用,而這一切 都是通過一套高度集成的可視化開發(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 通常也稱作套接字,用于描述 ip 地址和端口,socket 類 表現(xiàn)了客戶端套接字,它是屬于兩臺(tái)計(jì)算機(jī)的兩個(gè) tcp 通訊端口之間的通訊通 道。在網(wǎng)絡(luò)編程中,客戶端使用 socket 對(duì)網(wǎng)絡(luò)上某一個(gè)服務(wù)器的某一個(gè)端口發(fā) 服務(wù)器主機(jī) 客戶機(jī) a 客
21、戶機(jī) b 客戶機(jī) c 客戶機(jī) n 出連接請(qǐng)求,一旦連接成功,打開會(huì)話;會(huì)話完成后,關(guān)閉 socket??蛻舳瞬?需要指定打開的端口。服務(wù)器使用 socket 監(jiān)聽指定的端口,端口可以隨意指定, 等待客戶連接請(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)通過局域網(wǎng)內(nèi)主機(jī) 之間以文件共享后再經(jīng)過復(fù)制,粘貼方式實(shí)現(xiàn)。 (2)依靠可移動(dòng)磁盤的兩次信 息轉(zhuǎn)移實(shí)現(xiàn)。 (3)通過 internet 郵件方式實(shí)現(xiàn)。此三種方法并非不可行,但它 們都需要花費(fèi)較長的時(shí)間以及安全性
22、也得不到保證,工作效率將在很大程度上 受到限制。 如果通過局域網(wǎng)內(nèi)主機(jī)之間復(fù)制粘貼來實(shí)現(xiàn)文件資源共享,將浪費(fèi)大量的 網(wǎng)絡(luò)帶寬,極大程度上影響了網(wǎng)內(nèi)用戶的工作效率,甚至導(dǎo)致用戶不能正常工 作;如果依靠移動(dòng)磁盤實(shí)現(xiàn)文件的共享,將花費(fèi)大量的金錢,而文件較大移動(dòng) 磁盤容量不足的情況下會(huì)令人極為頭疼,何況移動(dòng)磁盤是病毒傳播的重要途徑; 如果通過 internet 郵件方式實(shí)現(xiàn),用戶需要接入 internet 服務(wù)器,這種方式 對(duì)遠(yuǎn)程服務(wù)器有非常大的依賴性,即使 1kb 的文件都要經(jīng)歷極度繁瑣的路徑, 不能徹底實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的即時(shí)交流,文件較大的情況下就不言而喻了。最重要的 是,在如今病毒黑客橫行的網(wǎng)絡(luò)世界中
23、,信息的安全性也得不到保證。 綜上所述,依靠 internet 網(wǎng)絡(luò)等方式實(shí)現(xiàn)文件資源交互的準(zhǔn)確性,快速 性及安全性遠(yuǎn)達(dá)不到理想的要求。 3.23.2 現(xiàn)行系統(tǒng)存在的主要問題分析現(xiàn)行系統(tǒng)存在的主要問題分析 針對(duì)企業(yè)來說,提高工作效率是企業(yè)的一個(gè)重心;降低成本是企業(yè)贏取最 大利益的重要方式;保證信息安全卻是可能影響企業(yè)生死存亡的關(guān)鍵。企業(yè)需 要對(duì)各種因素有足夠深刻的認(rèn)識(shí)才可能實(shí)現(xiàn)最終目標(biāo)-盈利。而傳統(tǒng)的文件資 源交互方式卻存在很多的問題,大致可以分為:一、不能有效地降低文件交互 成本;二、文件交換過程過于繁瑣;三、內(nèi)部機(jī)密資料得不到安全保證;四、 文件交互的準(zhǔn)確性得不到更本保證。 3.33.3
24、提出解決方案提出解決方案 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ì)過程主要分為兩部分: 第一部分:系統(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è)部分:客戶端與服務(wù)器端。文件傳輸需要建立有效的連接后, 通過 tcp/ip 協(xié)議實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的文件傳輸。通信雙方是通過三次握手建立 socket 連接,實(shí)現(xiàn)文件傳輸,最后關(guān)閉套節(jié)字連接。文件傳輸?shù)恼麄€(gè)流程圖如 下: tcp/ip 3 次握手 socket 流 三次
25、握手 圖 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ī)收到該 廣播信息以后將新上線的主機(jī)名,端口,ip 地址以及工作組信息添加到自己的 在線用戶列表并
26、都以 hand 為頭信息向局域網(wǎng)廣播本機(jī)的握手信息;當(dāng)包括剛上 線主機(jī)在內(nèi)的局域網(wǎng)所有主機(jī)收到這個(gè)握手信息以后線判斷自己的在線用戶列 表中是否存在這個(gè)主機(jī)廣播的主機(jī)信息,如果不存在就說明它是剛上線主機(jī), 最后將這個(gè)信息添加到自己在線列表,否則就不加;當(dāng)用戶下線的時(shí)候也將自 己的信息以 logout 為頭信息廣播給局域網(wǎng),其他在線用戶收到這個(gè)消息以后將 其主機(jī)信息從本地在線用戶列表刪除。其部分的源代碼分別如下: 客戶端主機(jī)服務(wù)器端主機(jī) 套節(jié)字連接請(qǐng) 求 連接響應(yīng) 寫入文件流 接收文件流 并保存 斷開連接斷開連接響應(yīng) procedure tform1.formcreate(sender: tobj
27、ect); /新用戶上線 以 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)托盤里邊 if wsastartup($101,wsadata)0 then exit; /獲取本機(jī)名 gethostname(pmyname,sizeof(pmyname); /獲取主機(jī)名 myname:=strpas(pmyna
28、me);/得到主機(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 begin myworkgroup:=wlis
29、t.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 minfobuf:array0.1023of cha
30、r; 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; begin mylogoutinf
31、o:=format(%-6s%-255s,logout,myname); strpcopy(mylogoutbuf,mylogoutinfo); client.broadcast(mylogoutbuf,9000); / 廣播自己離線信息 application.terminate; /銷毀線程 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( groupn
32、ame : string;list : tstringlist) : boolean; /獲 取工作組的計(jì)算機(jī)名稱 type tnetresourcearray = tnetresource; var netresource : tnetresource; buf : pointer; count,bufsize,res : dword; ind : integer; lphenum : thandle; temp : tnetresourcearray; tmpstr:string; begin result := false; fillchar(netresource, sizeof(ne
33、tresource), 0);/初始化網(wǎng)絡(luò)層次信息 netresource.dwdisplaytype := resourcedisplaytype_server;/類型為 服務(wù)器(工作組) / netresource.dwusage := resourceusage_container; netresource.dwscope := resourcetype_disk;/列舉文件資源信 res := wnetopenenum( resource_globalnet, resourcetype_disk, resourceusage_container, netresource,lphenum
34、); if res no_error then exit; /執(zhí)行失敗 while true do/列舉指定工作組的網(wǎng)絡(luò)資源 begin count := $ffffffff;/不限資源數(shù)目 bufsize := 8192;/緩沖區(qū)大小設(shè)置為 8k getmem(buf, bufsize);/申請(qǐng)內(nèi)存,用于獲取工作組信息 /獲取計(jì)算機(jī)名稱 res := wnetenumresource(lphenum, count, pointer(buf), bufsize); 獲取局域網(wǎng)的用戶 ip 地址以及添加用戶信息的源代碼如下: if res = error_no_more_items then b
35、reak;/資源列舉完畢 if (res no_error) then exit; /執(zhí)行失敗 temp := tnetresourcearray(buf); for ind := 0 to count - 1 do/列舉工作組的計(jì)算機(jī)名稱 begin tmpstr:=temp.lpremotename;/獲取工作組的計(jì)算機(jī)名稱 delete(tmpstr,1,2); list.add(tmpstr); inc(temp); end; end; res := wnetcloseenum(lphenum);/關(guān)閉一次列舉 if res no_error then exit;/執(zhí)行失敗 resul
36、t := 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:textfile; begin zeromemory(readbuf0,2030); adata.read(readbuf,size
37、of(readbuf); msg:=trim(string(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,head
38、len+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); /返回對(duì)方 ip /端口等信息 strpcopy(minfobuf,minfo); server.sendbuffer(recvip,recvport,min
39、fobuf,sizeof(minfobuf); end; if head=revlogthen /添加對(duì)方返回的自己的 ip (對(duì)比) begin / memo1.lines.add(revlog recv); recvport:=strtoint(copy(msg,headlen+1,portlen); recvip:=copy(msg,headlen+portlen+1,iplen); end; if head=hand then /處理握手信息 添加對(duì)方 ip 返回對(duì)方 ip begin / memo1.lines.add(hand recv); recvname:=copy(msg,h
40、eadlen+1,namelen); recvworkgroup:=copy(msg,headlen+namelen+1,workglen); recvip:=abinding.peerip; recvport:=9000; recvp2pdata(recvip,recvname,recvworkgroup,recvport); end; if head=logout then /處理 logout delete 其 ip begin recvname:=copy(msg,headlen+1,namelen); if mynamerecvname then deleteuser(recvnam
41、e); end; function tform1.getserverlist( var list : tstringlist ) : boolean; /獲取服務(wù)列表 var netresource : tnetresource; /初始化網(wǎng)絡(luò)層次信息 buf : pointer; count,bufsize,res : dword; lphenum : thandle; p : tnetresourcearray; i,j : smallint; networktypelist : tlist; /返回局域網(wǎng)中的工作組類型 begin result := false; networktype
42、list := tlist.create; /獲取局域網(wǎng)中的工作組信息 list.clear; /獲取整個(gè)網(wǎng)絡(luò)中的文件資源的句柄,lphenum 為返回名柄 res:=wnetopenenum( resource_globalnet, resourcetype_disk, resourceusage_container, nil,lphenum); /得到網(wǎng)絡(luò)中的所有工作組的名稱 if res no_error then exit;/raise exception(res);/執(zhí)行失敗 /獲取整個(gè)網(wǎng)絡(luò)中的網(wǎng)絡(luò)類型信息 count := $ffffffff;/不限資源數(shù)目 bufsize :=
43、8192;/緩沖區(qū)大小設(shè)置為 8k getmem(buf, bufsize);/申請(qǐng)內(nèi)存,用于獲取工作組信息 res := wnetenumresource(lphenum, count, pointer(buf), bufsize); /獲取計(jì)算機(jī)名稱 if ( res = error_no_more_items ) /資源列舉完畢 or (res no_error) /執(zhí)行失敗 then break; p := tnetresourcearray(buf); for i := 0 to count - 1 do /列舉各個(gè)工作組的信息 begin list.add( strpas( p.l
44、premotename ) ;/取得一個(gè)工作組的名稱 inc(p); end; end; res := wnetcloseenum(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ù)
45、。源代碼如下: 文件以及文件夾傳輸功能是本設(shè)計(jì)能夠?qū)崿F(xiàn)的理論核心。系統(tǒng)實(shí)現(xiàn)主要依 靠發(fā)送端與接收端建立有效的連接后,客戶端不斷地向socket寫入文件流,服 務(wù)器端不斷接受來自客戶端的socket文件流。直到文件傳輸完畢關(guān)閉套節(jié)字連 接并釋放空間。文件傳輸?shù)恼麄€(gè)過程可以分別表示為:客戶端和服務(wù)器端。 1)客戶端連接并發(fā)送功能: 客戶端點(diǎn)擊文件發(fā)送按鈕以后,系統(tǒng)首先判斷是否選擇文件接受者。如果 沒有選擇就提示用戶選擇接收者。然后以組件opendialog1.execute打開傳輸文 件。建立文件流并執(zhí)行tsendthread.execute。在tsendthread.execute中寫入 接收主
46、機(jī)的ip及端口號(hào)。向服務(wù)器發(fā)送連接請(qǐng)求。連接成功后發(fā)送文件流。代 碼依次如下: procedure tform1. bitbtn2click(sender: tobject); /發(fā)送按鈕 文件傳輸事件 var filename:string; tempitem:tlistitem; begin tempitem:=userlist.selected; /獲取文件接收者 if (not assigned(tempitem) or (tempitem=nil) then begin messagebox(self.handle ,請(qǐng)選擇消息接收者!,提示,0); exit; end; if op
47、endialog1.execute then /如果文件打開。 。 。 begin procedure tform1.bitbtn1click(sender: tobject); /顯示在線人數(shù) var f:textfile; begin label2.caption:=inttostr(userlist.items.count); end; 文件打開后客戶端調(diào)用函數(shù)tsendthread.createthread建立文件傳輸流。 此函數(shù)的源代碼如下: 文件流建立后由inherited create(false)提示系統(tǒng)自動(dòng)執(zhí)行 tsendthread.execute函數(shù)發(fā)送文件。碼如下: o
48、nstructor tsendthread.createthread(ip,filename: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; /定義文件流 begin try socket:=tidtcpclient
49、.create(nil); /創(chuàng)建客戶端套界字 socket.host:=fip; /寫入 ip socket.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); /寫入套接字類型為 transfile socket.writeln(ffilename); /寫入傳輸?shù)奈募?socket.writeln(
50、inttostr(fs.size); /整型轉(zhuǎn)字符型 fs.size 為字節(jié)流的長度 filename:=opendialog1.filename; /獲取文件名 tsendthread.createthread(tempitem.subitems.strings1,extractfilename(filename); /創(chuàng) 建線程并立刻執(zhí)行 end; end; 文件傳輸完畢以后斷開socket連接并釋放套節(jié)字空間。 2)服務(wù)器端響應(yīng)功能: 當(dāng)服務(wù)器收到來自客戶端文件傳輸連接請(qǐng)求后,對(duì)其進(jìn)行連接響應(yīng)建立連 接。連接建立后得到文件的基本信息,進(jìn)行自動(dòng)初始化并分配臨時(shí)空間。如果 文件大小為ok就認(rèn)
51、為是文件傳輸完畢自動(dòng)斷開連接。否則接收文件開始。當(dāng)傳 輸完畢后斷開連接。其源代碼如下: procedure tform1.pserverexecute(athread: tidpeerthread); /服務(wù)器端. 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 begi
52、n 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(hostname,255);/清空內(nèi)存 move(myname1,hostnam
53、e,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,transfersupervisor,integer(pname),lsize); end; tmpfn:=re
54、adln; move(tmpfn1,filename,length(tmpfn); sendmessage(form1.handle,wm_user+100,integer(filename),0); writeln(begin); lsize:=strtointdef(readln,0); if lsize=0 then begin disconnect; exit; end; fs:=tfilestream.create(filename,fmcreate); readstream(fs,lsize); fs.free; end; if cmd=startthen begin msg:=r
55、eadln(); /接收文件名 ldir:=split(msg,); localdir:=strpas(localroot); for i:=0 to high(ldir)-1 do begin localdir:=localdir+ldiri+; if not directoryexists(localdir) then createdir(localdir); /創(chuàng)建接收到的文件夾下邊的文件夾 end; targetname:=strpas(localroot)+msg; /本地文件名 writeln(begin); /發(fā)送開始信號(hào) lsize:=strtointdef(readln,0)
56、; /接收文件大小 if lsize=0 then begin disconnect; exit; end; /如果發(fā)過來的文件是 0kb 的 會(huì)收不到 所以 delete fs:=tfilestream.create(targetname,fmcreate); readstream(fs,lsize); fs.free; / openrevfilepath:=trim(strpas(localroot)+trim(ldir0); end; end; end; end; 服務(wù)器端將收到的文件流重組以后通過delphi組件savedialog設(shè)置保存路 徑并保存到本地文件夾,其源代碼如下: 4.
57、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)行多次單 文件的傳輸,很大程度上減少了用戶的工作量,從而有效地提高工作效率。其 過程同樣的分為服務(wù)器與客戶口端兩部分:首先是客戶口端向服務(wù)器發(fā)送連接 請(qǐng)求,服務(wù)器響應(yīng)后建立連接實(shí)現(xiàn)文件傳輸。具體過程如下: 1)客戶端請(qǐng)求建立連接并發(fā)送文件夾 用戶選擇文件夾接收者后點(diǎn)擊“文件夾傳輸”按鈕。
58、如果用戶忘記選擇文 件接收者,系統(tǒng)彈出提示框“請(qǐng)選擇消息接收者” ,然后打開本地文件路徑,并 將本地文件夾路徑得出來。 procedure tform1.umrcvfile(var msg:tmessage); /保存文件 var filename:pchar; begin filename:=pchar(msg.wparam); savedialog1.filename:=string(filename); /保存文件名 if savedialog1.execute then move (savedialog1.filename1,filename,length(savedialog1.fi
59、lename); 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(tempitem.s
60、ubitems.strings1); dir := ; 文件夾選取以后調(diào)用 tsendfilethread.createthread(toip,dir)建立文件 夾傳輸流,其源代碼如下: 文件夾傳輸流建立以后,由函數(shù) inherited create(false)提示立刻執(zhí)行 文件傳輸流函數(shù) tsendfilethread.execute。此部分的主要功能是向套節(jié)字寫 入傳輸文件的目標(biāo) ip 地址等信息,如果連接成功,寫入文件傳輸信息 csocket.writeln(transdir)以及調(diào)用函數(shù) putdir(flocaldir)寫入文件流。 其源代碼分別如下: constructor ts
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年國際足球賽事場(chǎng)地租賃合同
- 2024年建筑施工勞務(wù)承包簡約合同樣本
- 2024樁基礎(chǔ)工程專業(yè)分包合同模板
- 2024代理合同樣式
- 2024技術(shù)參股合作協(xié)議書
- 2024版藥品代理合同
- 二手房交易合同
- 店面承租協(xié)議書范本
- 2024項(xiàng)目開發(fā)全過程專項(xiàng)法律服務(wù)合同
- 2024常用合作合同范本
- 2023~2024學(xué)年第一學(xué)期高一期中考試數(shù)學(xué)試題含答案
- 2023年全國中學(xué)生英語能力競賽初三年級(jí)組試題及答案
- (完整版)青年就業(yè)創(chuàng)業(yè)見習(xí)基地匯報(bào)材料(完整版)
- 月光(羽泉)原版五線譜鋼琴譜正譜樂譜.docx
- 660MW機(jī)組空預(yù)器聲波吹灰器可行性研究報(bào)告最新(精華版)
- 控制柜安裝施工方案
- 動(dòng)車組火災(zāi)檢測(cè)(報(bào)警)系統(tǒng)
- 水面垃圾自動(dòng)打撈船的設(shè)計(jì) (全套圖紙)
- 煙草企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化 規(guī)范
- 裝飾施工技術(shù)標(biāo)準(zhǔn)及要求
- 2018秋七年級(jí)虎外考試卷英語試卷
評(píng)論
0/150
提交評(píng)論