畢業(yè)設(shè)計(jì)(論文)基于SOCKET的文件傳輸系統(tǒng)
《畢業(yè)設(shè)計(jì)(論文)基于SOCKET的文件傳輸系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《畢業(yè)設(shè)計(jì)(論文)基于SOCKET的文件傳輸系統(tǒng)(36頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 密 級 公 開 學(xué) 號 XX學(xué)院 畢業(yè)論文(設(shè)計(jì)) 基于socket的局域網(wǎng)文件傳輸系統(tǒng) 論文作者 指導(dǎo)教師 所屬學(xué)院 專業(yè) 本科專科 年級 論文提交日期 論文答辯日期 xxx xxx 數(shù)學(xué)與計(jì)算機(jī)學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù) 本科 2007級 2011年5月20日 2011年5月 28日 畢業(yè)論文(設(shè)計(jì))學(xué)術(shù)承諾 本人鄭重承諾:所呈交的畢業(yè)論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研
2、究工作及取得的研究成果.除了文中特別加以標(biāo)注和致謝的地方外,論文中不存在抄襲情況,論文中不包含其他人已經(jīng)發(fā)表的研究成果,也不包含他人或其他教學(xué)機(jī)構(gòu)取得的研究成果. 作者簽名: 日 期: 畢業(yè)論文(設(shè)計(jì))使用授權(quán)的說明 本人了解并遵守衡水學(xué)院有關(guān)保留、使用畢業(yè)論文的規(guī)定。即:學(xué)校有權(quán)保留或向有關(guān)部門送交畢業(yè)論文的原件或復(fù)印件,允許論文被查閱和借閱;學(xué)??梢怨_論文的全部或部分內(nèi)容,可以采用影印、縮印或其他復(fù)制手段保存論文及相關(guān)資料。 作者簽名:
3、 指導(dǎo)教師簽名: 日 期: 日 期: 07級計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文 基于socket的局域網(wǎng)文件傳輸系統(tǒng) 摘 要:文件傳輸是通過一條網(wǎng)絡(luò)連接從遠(yuǎn)地站點(diǎn)向本地主機(jī)復(fù)制文件。當(dāng)前internet上有著各種文件傳輸文件,例如QQ等。但大多數(shù)是需要遠(yuǎn)地服務(wù)器控制的。因此對于一些僅需在局域網(wǎng)內(nèi)部完成的傳輸工作存在著風(fēng)險(xiǎn)和資源浪費(fèi)。基于socket的局域網(wǎng)文件傳輸系統(tǒng)是用java語言在myeclipse for spring 8.6環(huán)
4、境下開發(fā)完成的一種適用于局域網(wǎng)的內(nèi)部文件傳輸系統(tǒng)。它具有聊天和文件傳輸兩個(gè)功能,可滿足校園網(wǎng)等小范圍內(nèi)的日常工作和學(xué)習(xí)。客戶端雙方及服務(wù)器在tcp協(xié)議基礎(chǔ)上建立socket連接之后,客戶端可以從服務(wù)器上獲取其它登陸用戶的用戶名和ip地址等信息,在用戶通訊前彼此的客戶端還應(yīng)該進(jìn)行連接,它們之間的具體通訊過程是不需要通過服務(wù)器的點(diǎn)對點(diǎn)通訊。 關(guān)鍵詞:java;點(diǎn)對點(diǎn);Socket連接 III Title: The Design and Implementation of File Transfer System Based on LAN Abstract: File transfer
5、 copy files from the remote site to the local host through a network connection. The Internet has various file transfer documents, such as QQ, etc. But most remote server control is required. So for some internal completed only in the local area network transmission there is a risk and waste of reso
6、urces. Based on the LAN socket with file transfer system is in myeclipse for Java language are completed under the environment of 8.6 development which is suitable for LAN internal documents transmitting system. It has a chat and file transfer two functions, can meet the campus network and other sma
7、ll range of daily work and study. The client and server in both parties based on TCP protocol after socket connection from the server, the client can obtain other landing users user name and IP address and other information, in user communication before each others client should also connects, the s
8、pecific communications between them is not to need to process through the servers peer-to-peer communication. Keywords: Java; Peer-to-peer; Socket connection 目 錄 Abstract: II 1 緒論 1 1.1選題背景 1 1.2選題意義 1 1.3 前人的工作成果 1 1.4 本文的主要工作 2 2開發(fā)環(huán)境和相關(guān)技術(shù)簡介 3 2.1 MyEclipse及MyEclipse for spring 3
9、 2.2tcp\ip協(xié)議簡介 4 2.3基于Socket的java網(wǎng)絡(luò)編程技術(shù)介紹 4 2.3.1什么是socket 4 2.3.2socket的運(yùn)行機(jī)制圖 5 2.3.3如何進(jìn)行socket編程 5 3 設(shè)計(jì)方案介紹 7 3.1系統(tǒng)需求分析 7 3.2服務(wù)器、客戶器功能介紹 8 3.2.1服務(wù)器功能介紹 8 3.2.2客戶端功能介紹 9 4實(shí)現(xiàn)過程分析 11 4.1系統(tǒng)通訊過程流程圖 11 4.2服務(wù)器、客戶端通訊過程設(shè)計(jì)分析 11 4.2.1服務(wù)器端分析 11 4.2.2客戶端分析 14 5 軟件運(yùn)行測試圖 17 5.1服務(wù)器運(yùn)行測試 17 5.2客戶端運(yùn)
10、行測試 17 結(jié)語 22 參考文獻(xiàn) 23 致 謝 24 附錄2配置及安裝說明 25 附錄2源代碼 26 柳亞林:VLAN在校園網(wǎng)中的高效應(yīng)用 第 IX 頁 共 5 頁 07級計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)畢業(yè)論文 1 緒論 1.1選題背景 當(dāng)今世界科學(xué)技術(shù)飛速發(fā)今天,借助于網(wǎng)絡(luò)進(jìn)行信息資源交流給人們帶來了極大的方便。各種文件傳輸系統(tǒng)都已被廣大用戶接受。比如QQ、UC、Internet郵件等互聯(lián)網(wǎng)上的文件傳輸。甚至需要花費(fèi)大量的金錢購買各種移動(dòng)磁盤或者其他局域網(wǎng)內(nèi)連接主機(jī)的硬件設(shè)備。而達(dá)到的效果卻總是因?yàn)閭鬏斝室约鞍踩{而受到很大的限制。在這種形勢下,開發(fā)一個(gè)功能簡單而
11、實(shí)用,能在Windows操作系統(tǒng)中運(yùn)行,并且具有可移植性的局域網(wǎng)內(nèi)文件傳輸工具勢在必行。 1.2選題意義 隨著網(wǎng)絡(luò)通信技術(shù)的發(fā)展與用戶需求日益多樣化,現(xiàn)代局域網(wǎng)絡(luò)正處在變革與發(fā)展之中,本課題的主要目的之一是為了更清晰地培養(yǎng)學(xué)生掌握科學(xué)研究方法的能力和使學(xué)生迅速體會文件傳輸系統(tǒng)的研發(fā)過程?;诰钟蚓W(wǎng)的文件傳輸系統(tǒng)能夠讓家庭網(wǎng)絡(luò)以及各個(gè)企業(yè)等局域網(wǎng)對內(nèi)部資料有一個(gè)快捷,準(zhǔn)確,安全的共享。特別是對如今較大系統(tǒng)研發(fā)的模塊分工合作得到了絕對保密性,從而使各項(xiàng)工作有計(jì)劃、更科學(xué)的進(jìn)行及順利完成,使企業(yè)的辦事效率得到顯著提高。文件傳輸系統(tǒng)主要功能是自動(dòng)獲取局域網(wǎng)內(nèi)用戶的主機(jī)名,IP地址以及工作組名字,最
12、終以C/S模式通過TCP/IP協(xié)議實(shí)現(xiàn)點(diǎn)到點(diǎn)文件傳輸功能。本系統(tǒng)既鍛煉了我們的實(shí)際動(dòng)手能力,使我們將大學(xué)四年所學(xué)的理論知識與實(shí)際開發(fā)相結(jié)合,又引導(dǎo)我們進(jìn)行了一次模擬實(shí)際產(chǎn)品的開發(fā),對于我們以后工作能力的培養(yǎng)具有重要的意義。 1.3 前人的工作成果 目前,國內(nèi)外企業(yè)對局域網(wǎng)的文件傳輸系實(shí)踐上都還不夠完善。文件傳輸系統(tǒng)由于比較復(fù)雜,可變因素較多,安全性低,因此發(fā)展還不成熟。但是隨著科學(xué)技術(shù)的發(fā)展,各為中心的資源共享系統(tǒng)也即將進(jìn)入高速發(fā)展期。在國內(nèi),隨著企業(yè)資源管理的規(guī)范化和規(guī)模的不斷擴(kuò)大,企業(yè)的計(jì)算機(jī)資源管理將不僅僅停留在依靠硬件或者Internet網(wǎng)絡(luò)獲取,而且將會向著安全的內(nèi)部網(wǎng)絡(luò)化資源管
13、理方式邁進(jìn)。 在此之前,人們已經(jīng)在網(wǎng)絡(luò)通信這個(gè)問題上做了許多的工作,開發(fā)了大量的文檔、程序和應(yīng)用軟件,如Richard Stevens的《Unix Network Programming》介紹了在UNIX操作系統(tǒng)下通過Socket實(shí)現(xiàn)網(wǎng)絡(luò)通信的基本原理及實(shí)現(xiàn)方式,Microsoft的Windows Sockets API提供了一種快速編程實(shí)現(xiàn)Socket網(wǎng)絡(luò)通信的機(jī)制。 前人的這些工作無疑為我們提供了寶貴的經(jīng)驗(yàn)和快速的開發(fā)方法以及現(xiàn)成的開發(fā)實(shí)例。然而,前人已有的工作成果已經(jīng)無法完全滿足我們的需求,即提供一種基于Socket的,易于使用具有高度可定制性的,面向中小企業(yè)內(nèi)部通信需求的局域網(wǎng)通信
14、軟件。 1.4 本文的主要工作 論文主要針對公司或其他小范圍內(nèi)部局域網(wǎng)落設(shè)計(jì)出一種方便使用的、高性能的、并滿足其基本通信需求的局域網(wǎng)文件傳輸系統(tǒng)(包含文件傳輸和聊天部分)??蛻舳伺c服務(wù)器端可以在多種硬件平臺上運(yùn)行,具有較好好的兼容性能。目前我們將通過在TCP/IP協(xié)議之上建立一個(gè)功能簡單的文件傳輸系統(tǒng)(包含文件傳輸和聊天部分), 日后程序功能將可以繼續(xù)擴(kuò)展, 逐步發(fā)展成一個(gè)功能比較完整的大型文件傳輸系統(tǒng),例如加上文件續(xù)傳功能,客戶端連接發(fā)展成多對多連接,服務(wù)器增加為客戶深一步服務(wù)(如發(fā)布一些消息)的功能等。 2開發(fā)環(huán)境和相關(guān)技術(shù)簡介 2.1 MyEclipse及MyEcl
15、ipse for spring MyEclipse企業(yè)級工作平臺(MyEclipse Enterprise Workbench ,簡稱MyEclipse)是對Eclipse IDE的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和J2EE的開發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。 在結(jié)構(gòu)上,MyEclipse的特征可以被分為7類: 1. J2EE模型 2. WEB開發(fā)工具 3. EJB開發(fā)工具 4
16、. 應(yīng)用程序服務(wù)器的連接器 5. J2EE項(xiàng)目部署服務(wù) 6. 數(shù)據(jù)庫服務(wù) 7. MyEclipse整合幫助 對于以上每一種功能上的類別,在Eclipse中都有相應(yīng)的功能部件,并通過一系列的插件來實(shí)現(xiàn)它們。MyEclipse結(jié)構(gòu)上的這種模塊化,可以讓我們在不影響其他模塊的情況下,對任一模塊進(jìn)行單獨(dú)的擴(kuò)展和升級。 簡單而言,MyEclipse是Eclipse的插件,也是一款功能強(qiáng)大的J2EE集成開發(fā)環(huán)境,支持代碼編寫、配置、測試以及除錯(cuò)。 而myeclipse for spring是在myeclipse的基礎(chǔ)上,加強(qiáng)了對spring的支持。 MyEclipse for Spring
17、是MyEclipse家族的成員之一,其最大的特點(diǎn)就是提 供了更強(qiáng)悍的針對Spring框架的支持。其實(shí)在MyEclipse 中已經(jīng)提供了針對Spring框架的一些支持,集成了Spring IDE,但是這些對于那些針對Spring開發(fā)的開發(fā)者來說或許還不足夠,他們需要的是更強(qiáng)大,更有針對性的開發(fā)工具。由于Spring的廣泛使用以及 Spring開發(fā)者的呼聲高漲,MyEclipse for Spring 隨之出現(xiàn)。 MyEclipse for Spring 提供對Spring MVC的強(qiáng)大支持功能,針對Spring的更專業(yè)的編輯器,以及針對Spring項(xiàng)目的項(xiàng)目創(chuàng)建向?qū)У裙δ?,讓Spring開發(fā)者
18、可以更輕松的通過 MyEclipse for Spring 快速創(chuàng)建一個(gè)基于Spring的應(yīng)用。除此之外MyEclipse for Spring 8.5也提供了MyEclipse 8.5幾乎全部特性支持,這讓MyEclipse for Spring 比MyEclipse幾乎是有過之而無不及。 整合SSH有手動(dòng)的有自動(dòng)的,要想徹底掌握,建議一個(gè)框架一個(gè)框架的學(xué)習(xí),學(xué)習(xí)完三個(gè)框架自然就會整合了。 2.2tcp\ip協(xié)議簡介 TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)是網(wǎng)絡(luò)中使用的基本通信協(xié)議。雖然從名字上看TCP/IP包括兩種協(xié)議,即傳輸控制協(xié)議(TCP)和網(wǎng)際協(xié)議(IP),但是TCP/IP實(shí)際
19、上是一組協(xié)議[4]。它是異構(gòu)網(wǎng)絡(luò)互連的通信協(xié)議,通過它可以實(shí)現(xiàn)各種異構(gòu)網(wǎng)絡(luò)或異種機(jī)之間的互聯(lián)通信。 TCP/IP已成為當(dāng)今計(jì)算機(jī)網(wǎng)絡(luò)最成熟、應(yīng)用最廣的互聯(lián)協(xié)議。Internet采用的就是TCP/IP協(xié)議,網(wǎng)絡(luò)上各種各樣的計(jì)算機(jī)上只要安裝了TCP/IP協(xié)議,它們之間就能相互通信。運(yùn)行TCP/IP協(xié)議的網(wǎng)絡(luò)是一種采用包(分組)交換網(wǎng)絡(luò)。 基于TCP/IP的參考模型將協(xié)議分成四個(gè)層次,它們分別是:網(wǎng)絡(luò)訪問層、網(wǎng)際互連層、傳輸層(主機(jī)到主機(jī))、和應(yīng)用層。 應(yīng)用層對應(yīng)于OSI參考模型的高層,為用戶提供所需要的各種服務(wù),例如:FTP、Telnet、DNS、SMTP等。 傳輸層對應(yīng)于OSI參考模型
20、的傳輸層,為應(yīng)用層實(shí)體提供端到端的通信功能。該層定義了兩個(gè)主要的協(xié)議:傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。 TCP協(xié)議提供的是一種可靠的、面向連接的數(shù)據(jù)傳輸服務(wù);而UDP協(xié)議供的是不可靠的、無連接的數(shù)據(jù)傳輸服務(wù)?!? 網(wǎng)際互聯(lián)層主要解決主機(jī)到主機(jī)的通信問題。該層有四個(gè)主要協(xié)議:網(wǎng)際協(xié)議(IP)、地址解析協(xié)議(ARP)、互聯(lián)網(wǎng)組管理協(xié)議(IGMP)和互聯(lián)網(wǎng)控制報(bào)文協(xié)議(ICMP)。 IP協(xié)議是網(wǎng)際互聯(lián)層最重要的協(xié)議,它提供的是一個(gè)不可靠、無連接的數(shù)據(jù)報(bào)傳遞服務(wù)。 網(wǎng)絡(luò)訪問層與OSI參考模型中的物理層和數(shù)據(jù)鏈路層相對應(yīng)。事實(shí)上,TCP/IP本身并未定義該層的協(xié)議,而由參與互連的各網(wǎng)
21、絡(luò)使用自己的物理層和數(shù)據(jù)鏈路層協(xié)議,然后與TCP/IP的網(wǎng)絡(luò)訪問層進(jìn)行連接[1]。 2.3基于Socket的java網(wǎng)絡(luò)編程技術(shù)介紹 2.3.1什么是socket 網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通訊連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket。Socket通常用來實(shí)現(xiàn)客戶方和服務(wù)方的連接。Socket是TCP/IP協(xié)議的一個(gè)十分流行的編程界面,一個(gè)Socket由一個(gè)IP地址和一個(gè)端口號唯一確定。 但是,Socket所支持的協(xié)議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯(lián)系的。在Java環(huán)境下,Socket編程主要是指基于TCP/IP協(xié)議的網(wǎng)絡(luò)編程[2]。 2.3
22、.2socket的運(yùn)行機(jī)制圖 一般而言,socket大部分應(yīng)用于服務(wù)器與客戶端的連接與通信,本系統(tǒng)雖然有服務(wù)器,但并不實(shí)際參與用戶間的交流和文件傳輸,只起到輔助作用,所以在文件傳輸時(shí)客戶端與客戶端之間其實(shí)是互為服務(wù)器的,圖2- 1是從服務(wù)器與客戶端之間的關(guān)系來描述socket通信機(jī)制。 圖2- 2socket通訊機(jī)制 2.3.3如何進(jìn)行socket編程 java在包中提供了兩個(gè)類Socket和ServerSocket,分別用來表示雙向連接的客戶端和服務(wù)端。這是兩個(gè)封裝得非常好的類。 首先是socket類,其表示TCP連接的客戶方,代表了通信的一方,常用的構(gòu)造方法有: publ
23、ic Socket(InerAddress address,int port) throw IOException[3] public Socket(String host,int port) throws UnknownHostException,IOException 從上述定義克制,在引用Socket構(gòu)造方法是,需要指定兩個(gè)參數(shù),即“服務(wù)器”程序所在的IP地址和其監(jiān)聽的端口號。創(chuàng)建對象是若發(fā)生I/O錯(cuò)誤,則構(gòu)造方法需拋出IOException異常。 上述近視通信的一方即客戶端,若要真正完成通信,還需要相應(yīng)的、能更客戶的請求作出響應(yīng)的服務(wù)器程序.SerVerSocket類是
24、加吧網(wǎng)絡(luò)API中提供的服務(wù)器功能的類,常用構(gòu)造方法為: public ServerSocket(int port) throws IOException[3] 該構(gòu)造方法是常見一個(gè)ServerSocket對象,并綁定到所指定的端口上。有了該對象,就可以完成旗艦廳端口和等待連接的功能。 3 設(shè)計(jì)方案介紹 3.1系統(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í)間以及安
25、全性也得不到保證,工作效率將在很大程度上受到限制。 如果通過局域網(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)磁盤容量不足的情況下會令人極為頭疼,何況移動(dòng)磁盤是病毒傳播的重要途徑;如果通過Internet郵件方式實(shí)現(xiàn),用戶需要接入Internet服務(wù)器,這種方式對遠(yuǎn)程服務(wù)器有非常大的依賴性,即使1KB的文件都要經(jīng)歷極度繁瑣的路徑,不能徹底實(shí)現(xiàn)點(diǎn)對點(diǎn)的即時(shí)交流,文件較大的情況下就不言而喻了。最重要的是,在如今病毒黑客橫行的網(wǎng)絡(luò)世界中,信息的安全性也得不到
26、保證。 綜上所述,依靠Internet網(wǎng)絡(luò)等方式實(shí)現(xiàn)文件資源交互的準(zhǔn)確性,快速性及安全性遠(yuǎn)達(dá)不到理想的要求。 現(xiàn)行系統(tǒng)存在的主要問題分析: 針對企業(yè)來說,提高工作效率是企業(yè)的一個(gè)重心;降低成本是企業(yè)贏取最大利益的重要方式;保證信息安全卻是可能影響企業(yè)生死存亡的關(guān)鍵。企業(yè)需要對各種因素有足夠深刻的認(rèn)識才可能實(shí)現(xiàn)最終目標(biāo)---盈利。而傳統(tǒng)的文件資源交互方式卻存在很多的問題,大致可以分為:一、不能有效地降低文件交互成本;二、文件交換過程過于繁瑣;三、內(nèi)部機(jī)密資料得不到安全保證;四、文件交互的準(zhǔn)確性得不到更本保證。 解決方案: 解決當(dāng)前問題的方案主要是指在允許的成本、性能要求下,分析系統(tǒng)實(shí)施
27、的可行性,提出功能實(shí)現(xiàn)的依據(jù),包括其簡單性,安全性以及經(jīng)濟(jì)可行性。根據(jù)企業(yè)簡單快速,安全的資源共享等要求,提出以下四種解決方案: 1)操作簡單性方案:開發(fā)的系統(tǒng)需要有以下特點(diǎn):Windows友好的用戶界面和系統(tǒng)快速的應(yīng)用方法,簡單易操作,不需對使用人員進(jìn)行培訓(xùn),可以使用戶很好的掌握。對傳輸文件過程中的文件的載入設(shè)置都是非常簡單可行,比如:如果用戶忘記選擇文件接收者的時(shí)候系統(tǒng)會自動(dòng)提示“請選擇接收用戶”要求用戶選擇主機(jī)而不導(dǎo)致錯(cuò)誤出現(xiàn)而引發(fā)的不便,這樣就大大提高工作效率。而且開發(fā)的系統(tǒng)應(yīng)該簡單易操作,易維護(hù),減少了不必要的麻煩。對于家庭局域網(wǎng)以及一些比較簡單的中小企業(yè)網(wǎng),系統(tǒng)必須做到在實(shí)際應(yīng)用
28、中較為成功。系統(tǒng)應(yīng)為用戶提供Windows所一貫堅(jiān)持的非常友好、操作簡單的用戶界面。 2)傳輸安全性方案:系統(tǒng)開發(fā)完成后,能有效地使內(nèi)部資源與外網(wǎng)的完全隔離,從而保證了內(nèi)部機(jī)密文件的安全性。 3)經(jīng)濟(jì)可行性方案:系統(tǒng)開發(fā)完成必須作到提高文件共享效率,不管是在資金上還是效率上都能達(dá)到預(yù)期的效果的。最重要的一點(diǎn)就是:使用戶避免花費(fèi)高額的資金去購買各種移動(dòng)磁盤甚至是通過Internet郵件方式,使得用戶方便的同時(shí),也讓信息少走了不少“彎路”。 4)快速準(zhǔn)確性方案:鑒于系統(tǒng)的目標(biāo)要求和特點(diǎn),能夠保證快速準(zhǔn)確地實(shí)現(xiàn)文件共享。 綜合上述,本設(shè)計(jì)在Windows XP操作系統(tǒng)下,以中文版My
29、Eclipse for Spring為開發(fā)工具,以C/S為系統(tǒng)功能結(jié)構(gòu),基于點(diǎn)對點(diǎn)的TCP/IP協(xié)議理論,通過Socket套節(jié)字連接客戶端與服務(wù)器實(shí)現(xiàn)文件及文件夾傳輸。徹底避免了文件交換過程與外部網(wǎng)絡(luò)的接觸,實(shí)現(xiàn)快速的文件資源共享。并能夠確保內(nèi)部文件的機(jī)密性,能夠在很大程度上有效地提高工作效率。 3.2服務(wù)器、客戶器功能介紹 3.2.1服務(wù)器功能介紹 本系統(tǒng)服務(wù)器的主要功能是供已登錄用戶獲取其他登錄用戶的ip地址,并不真正參與客戶端雙方的語言交流與文件傳輸,也就是說當(dāng)獲取到要傳送的對方ip之后,即使服務(wù)器關(guān)閉也不會影響此時(shí)的雙方,雙方依舊可以交流和傳輸文件;只不過其他用戶要向某人傳
30、輸文件時(shí)不能再簡單的獲取ip地址了。換句話說當(dāng)已知對方ip之后即使不登陸服務(wù)器或登陸服務(wù)器失敗照樣也可以完成所有可以完成的操作。服務(wù)器登陸界面如Error! Reference source not found.。 圖3- 1服務(wù)器界面 3.2.2客戶端功能介紹 客戶端的程序是整個(gè)系統(tǒng)程序的核心,它提供了與另一端連接到交流、文件傳輸?shù)乃泄δ?。用戶通過客戶端程序登陸到服務(wù)器,從而獲得已登錄用戶列表,選擇要連接的用戶名稱,獲取其ip地址,然后連接,最后與之進(jìn)行交流或傳輸文件。 若客戶端因某些原因不能登錄服務(wù)器,那么只要得到對方ip也照樣可以
31、與對方通訊。 需要注意的是,本系統(tǒng)的連接屬于單向連接,即A用戶連接B用戶之后,A可以對B進(jìn)行單向信息傳輸,若B需要與與A通訊則B必須再與A連接。用戶登陸界面如圖3- 2登陸之后的客戶端界面如圖3- 3。 圖3- 4客戶端登陸界面 圖3- 5客戶端界面 4實(shí)現(xiàn)過程分析 4.1系統(tǒng)通訊過程流程圖 圖4- 1系統(tǒng)通訊過程圖 注:圖中箭頭方向表示信息流向。 4.2服務(wù)器、客戶端通訊過程設(shè)計(jì)分析 4.2.1服務(wù)器端分析 服務(wù)器端主要由server.java, ServerAgentThread.java和ServerThread.java三個(gè)類文件組成
32、,完成與用戶連接和監(jiān)聽已登錄用戶的功能。
server.java文件主要是創(chuàng)建服務(wù)器的運(yùn)行界面和創(chuàng)建并啟動(dòng)服務(wù)器線程完成把已接收到的登陸的客戶端信息(用戶名和ip地址)顯示在服務(wù)器界面上。下邊是此文件中獲取用戶信息并顯示的函數(shù)。
public void refreshList()
{
//更新在線用戶列表的業(yè)務(wù)處理代碼
Vector v=new Vector();
int size=this.onlineList.size();
for(int i=0;i 33、(ServerAgentThread)this.onlineList.get(i);
String temps=tempSat.sc.getInetAddress().toString();
temps=temps+"--"+tempSat.getName()+" 上線";//獲得所需信息
v.add(temps);//添加到Vector中
}
this.jlUserOnline.setListData(v);//更新列表數(shù)據(jù)
}
ServerAgentThread.java文件主要功能是獲取套接字,創(chuàng)建輸入輸出流完成與客戶端的具體鏈接和信息交流,即從 34、客戶端獲取用戶信息(包括用戶名和ip地址)加入到用戶列表中并刷新服務(wù)器上用戶列表,同時(shí)把最新用戶名列表發(fā)送給客戶端,此外還要完成客戶端發(fā)來的查找相應(yīng)用戶名的ip地址的請求。兩個(gè)功能的主要函數(shù)如下:
public void nick_name(String msg)
{
try
{
String name=msg.substring(13);//獲得用戶的用戶名
this.setName(name);//用用戶名稱給該線程取名
Vector v=father.onlineList;//獲得在線用戶列表
boolean isChongMing=fa 35、lse;
int size=v.size();//獲得用戶列表的大小
for(int i=0;i 36、{
dout.writeUTF("<#NAME_CHONGMING#>");//將重名信息發(fā)送給客戶端
din.close();//關(guān)閉數(shù)據(jù)輸入流
dout.close();//關(guān)閉數(shù)據(jù)輸出流
sc.close();//關(guān)閉Socket
flag=false;//終止該服務(wù)器代理線程
}
else//如果不重名
{
v.add(this);//將該線程添加到在線列表
father.refreshList();//刷新服務(wù)器在線信息列表
String nickListMsg="";
37、size=v.size();//獲得在線列表大小
for(int i=0;i 38、e();
for(int i=0;i 39、 }
}
}
catch(IOException e)
{
e.printStackTrace();
}
}
public void findUser(String msg){
try{
System.out.println("msg:"+msg);
String name=msg.substring(7,msg.length());//獲得接收方的名字
Vector v=father.onlineList;//獲得在線用戶列表
int size=v.size();//獲得在線用戶列表的大小 40、
for(int i=0;i 41、s().toString().substring(1));
break;
}
}
}
catch(IOException e){e.printStackTrace();}
}
4.2.2客戶端分析
客戶端主要有ClientAgentThread.java, ReceiverThread.java ,F(xiàn)ileSender.java和Qqlogin.java三個(gè)類文件組成,完成與服務(wù)器及其他客戶端連接并通訊的功能。
ClientAgentThread.java文件主要完成與服務(wù)器的連接,向服務(wù)器發(fā)送自己的用戶信息,接受服務(wù)器發(fā)來的用戶名列表和向服 42、務(wù)器發(fā)送獲取特定用戶ip的請求。主要功能函數(shù)如下:
public ClientAgentThread(FileSender father)
{
this.father=father;
try
{
din=new DataInputStream(father.sc.getInputStream());//創(chuàng)建數(shù)據(jù)輸入輸出流
dout=new DataOutputStream(father.sc.getOutputStream());
String name=father.jtfNickName.getText().trim();//獲得 43、用戶名
dout.writeUTF("<#NICK_NAME#>"+name);//發(fā)送用戶名到服務(wù)器
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void run(){
while(flag){
try{
String msg=din.readUTF().trim();//獲得服務(wù)器發(fā)來的信息
if(msg.startsWith("<#NAME_CHONGMING#>")){//收到重名的信息
this.name_chongming( 44、);
}
else if(msg.startsWith("<#NICK_LIST#>")){//收到用戶名列表
this.nick_list(msg);
}
else if(msg.startsWith("<#SERVER_DOWN#>")){//當(dāng)收到服務(wù)器離開的信息
this.server_down();
}else if(msg.startsWith("<#FIP#>")){//當(dāng)收到服務(wù)器發(fā)來的用戶IP的信息
this.set_sendIP(msg);
}
}
catch(E 45、xception e){e.printStackTrace();}
}
}
ReceiverThread.java文件主要完成數(shù)據(jù)的接受與計(jì)算數(shù)據(jù)傳送的時(shí)間。
FileSender.java文件是此系統(tǒng)最核心的部分,完成客戶端界面設(shè)計(jì)和客戶端之間的連接與通訊(包括文字通訊和文件傳輸)的所有功能功能,并有登陸界面的一些錯(cuò)誤提示功能(如用戶名不能為空等提示),是此系統(tǒng)最核心功能的表述。此文件中清晰表明了此系統(tǒng)的具體通訊過程是與服務(wù)器無關(guān);文件傳輸是以字節(jié)流的方式進(jìn)行的主要函數(shù)如下:
5 軟件運(yùn)行測試圖
5.1服務(wù)器運(yùn)行測試
啟動(dòng)服務(wù)器:
圖5- 1服務(wù)器界面
46、點(diǎn)擊啟動(dòng)按鈕:
圖5- 2啟動(dòng)服務(wù)器提示界面
5.2客戶端運(yùn)行測試
啟動(dòng)客戶端并輸入用戶名服務(wù)器的ip:
圖5- 3客戶端登陸界面
點(diǎn)擊登錄:
圖5- 4客戶端正常工作界面
再按照前面步驟再啟動(dòng)一個(gè)客戶端,并獲取zsy用戶的ip,之后點(diǎn)擊鏈接并向?qū)Ψ桨l(fā)送字母d:
圖5- 5與其它客戶端連接后界面
此時(shí)zsy用戶界面:
圖5- 6收到zsyzsy信息界面
再新建用戶zsyzsy客戶端界面點(diǎn)擊發(fā)送文件:
圖5- 7zsyzsy選擇發(fā)送文件界面
選中要發(fā)送的文件,之后點(diǎn)擊保存,雙方界面如下:
圖5- 8zsyzsy發(fā)送文件界面
圖5- 9 47、zsy收到zsyzsy發(fā)送文件請求界面
在用戶zsy界面上點(diǎn)擊接受:
圖5- 10zsy保存接收文件路徑選擇界面
選擇路徑后點(diǎn)擊保存:
圖5- 11zsy接收成功界面
結(jié)語
1.特點(diǎn)
本系統(tǒng)最大的特點(diǎn)就是結(jié)構(gòu)簡單。由于界面清晰、簡潔、一目了然,從而使用戶使用起來相當(dāng)?shù)姆奖悖遗cinternet上的類似軟件相比,在一些條件上(如網(wǎng)絡(luò)帶寬等)會更加有利于小型局域網(wǎng)中人們的交流、工作。
2.待解決問題
本系統(tǒng)還有一個(gè)特點(diǎn)就是可擴(kuò)展性非常強(qiáng)。與原因相對,本系統(tǒng)的簡單也顯示出了缺點(diǎn)和待解決的問題:
⑴文件傳輸部分還存在著一些bug。
⑵文件傳輸部分的設(shè)計(jì)不支持?jǐn)帱c(diǎn)續(xù)傳的功 48、能。
⑶當(dāng)多個(gè)員工需要共同探討問題或者相互傳送文件時(shí),本系統(tǒng)并不支持此功能。
參考文獻(xiàn)
[1] Douglas E.Comer.TCP/IP 網(wǎng)絡(luò)互連[M].北京:人民郵電出版社,2002.23.
[2] Subrahmanyam Allamaraju. Java Server Programming: Principles and Technologies[M]. 北京:機(jī)械工業(yè)出版社,2001,1-23.
[3] Bruce Eckel. JAVA編程思想[M].北京:機(jī)械工程出版社, 2003.12-16. 呂鳳翥,馬皓.Java語言程序設(shè)計(jì)[J].北京:清華大學(xué)出 49、版社.2008.403-409.
[4] 肖新峰,宋強(qiáng),王立新.TCP/IP協(xié)議與網(wǎng)絡(luò)管理[J].背景:清華大學(xué)出版社,2009.185-259.
[5] Douglas D.Huston.Java Network Programming[M].北京:清華大學(xué)出版社,2004.57.
[6] 朱和平.即時(shí)通信研究綜述[J].現(xiàn)代計(jì)算機(jī),2006,(12):55-58.
[7] 劉培鶴,牛曉蕾,杜鵬,何文才,張媛媛.企業(yè)即時(shí)通信系統(tǒng)安全性分析與設(shè)計(jì)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2007,(2):59-61.
[8] 張效祥.計(jì)算機(jī)科學(xué)技術(shù)百科全書.北京:清華大學(xué)出版社,1998.34-4 50、3.
[9] 馮博,應(yīng)群.面向?qū)ο蟮腏AVA網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社, 2003.20-33.
[10] 蔣東興.Windows Sockets 網(wǎng)絡(luò)程序設(shè)計(jì)大全[M].北京:清華大學(xué)出版社,1999.74.
[11] 趙雙紅,劉壽強(qiáng),潘春華.P2P通信網(wǎng)絡(luò)安全問題探析[J].計(jì)算機(jī)安全,2003,(11):6-9.
[12] David Iseminger.網(wǎng)絡(luò)連接服務(wù)開發(fā)人員參考庫[M].北京:機(jī)械工業(yè)出版社,2001.9.
[13] Donald E.Knuth. The Art of Computer Programming[M]. 北京:人民郵電出版社,1998 51、.87.
[14] 薩師煊,王珊著.計(jì)算機(jī)網(wǎng)絡(luò)概論[J].電腦信息報(bào),2001.9-23.
[15] 田文雅.程序設(shè)計(jì)[J]. 計(jì)算機(jī)時(shí)代,2001.9-21.
[16] Bruce Eckel. JAVA編程思想[M].北京:機(jī)械工程出版社, 2003.12-16.
第 29 頁 共 29 頁
致 謝
首先感謝我的導(dǎo)師楊金山,論文從選題、結(jié)構(gòu)安排、文字處理直至最終定稿的全過程無一不是在楊老師的悉心指導(dǎo)、嚴(yán)格要求和親切關(guān)懷下完成的。
在本論文完稿之際,謹(jǐn)向所有給予我關(guān)心和幫助的人們致以我最誠摯的謝意。我的良師對本文的寫作給予了極大的支持與精心的指導(dǎo),提出了很多寶貴的論文整改意見 52、,也做了大量的輔助工作,我謹(jǐn)向恩師深表謝意。恩師嚴(yán)謹(jǐn)求實(shí)的學(xué)風(fēng),孜孜不倦的精神,淵博的學(xué)識,深邃的思想,都深深的刻在我的心中,在老師的教導(dǎo)下,我接受了全新的思想觀念,樹立了明確的學(xué)術(shù)目標(biāo),掌握了通用的研究方法。在此,我向幫助指導(dǎo)和培養(yǎng)我的導(dǎo)師致以崇高的敬意和衷心的感謝!
我的周圍是一群風(fēng)華正茂的有志青年,他們的求知精神不斷激勵(lì)著我學(xué)習(xí)、鉆研專業(yè)知識。在完成畢業(yè)論文的過程中很多同學(xué)都給予了我極大的幫助。
最后,感謝我的家人和朋友,是你們在生活和學(xué)習(xí)上給了我巨大的鼓勵(lì)和支持,我的學(xué)業(yè)得以順利完成離不開你們的幫助和照顧。不管過去、現(xiàn)在、還是將來,家人和朋友永遠(yuǎn)是我堅(jiān)強(qiáng)的后盾,也是我努力學(xué)習(xí)和勤奮 53、工作的最大動(dòng)力。
附錄2配置及安裝說明
配置:
網(wǎng)上去下個(gè)jdk,安裝好后,在我的電腦右鍵點(diǎn)開屬性->高級-環(huán)境變量里面可以設(shè)置JDK安裝,沒有設(shè)置好環(huán)境變量不能正常使用。
在系統(tǒng)變量中找到classpath變量,點(diǎn)“編輯”,在原來的內(nèi)容后面先寫個(gè)分號,再寫個(gè)小數(shù)點(diǎn),再寫個(gè)分號,然后再把你安裝的bin文件的路徑寫上去,如C:\Program Files\Java\jdk1.6.0_10 \bin 這樣就把classpath變量設(shè)置好了。下一步再找到path變量,點(diǎn)“編輯”,也是在原內(nèi)容后面寫上分號點(diǎn)分號,然后把你安裝的tools.jar文件的路徑寫上去,如C:\P 54、rogram Files\Java\jdk1.6.0_10\lib\tools.jar 這樣就把path變量也設(shè)置好了,下一步是設(shè)置JAVA_HOME變量,這個(gè)變量原來沒有,所以得點(diǎn)“新建”,在值中寫入你安裝的jdk的路徑,如C:\Program Files\Java\jdk1.6.0_10。
安裝:
得到客戶端和服務(wù)器的可執(zhí)行文件后直接雙擊打開即可,無需安裝。
附錄2源代碼
服務(wù)器:package hsnc;
import java.util.*;
import java.awt.*;
import java.awt.eve 55、nt.*;
import javax.swing.*;
import javax.swing.event.*;
import .*;
import java.io.*;
public class Server extends JFrame implements ActionListener
{
JLabel jlPort=new JLabel(" 工作愉快");//創(chuàng)建提示輸入端口號標(biāo)簽
JLabel jlPort1=new JLabel("衡水學(xué)院 祝您");
JTextField jtfPort=new JTextField("7777");//用 56、于輸入端口號的文本框
JButton jbStart=new JButton("啟動(dòng)");//創(chuàng)建"啟動(dòng)"按鈕
JButton jbStop=new JButton("關(guān)閉");//創(chuàng)建"關(guān)閉"按鈕
JPanel jps=new JPanel();//創(chuàng)建一個(gè)JPanel對象
JList jlUserOnline=new JList();//創(chuàng)建用于顯示當(dāng)前用戶的JList
JScrollPane jspx=new JScrollPane(jlUserOnline);//將顯示當(dāng)前用戶的JList放在JScrollPane中
JSplitPane jspz=new JS 57、plitPane(JSplitPane.HORIZONTAL_SPLIT,jspx,jps);//創(chuàng)建JSplitPane對象
ServerSocket ss;//聲明ServerSocket引用
ServerThread st;//聲明ServerThread引用
Vector onlineList=new Vector();//創(chuàng)建存放當(dāng)前在線用戶的Vector對象
public Server()
{
this.initialComponent();//初始化控件
this.addListener();//為相應(yīng)的控件注冊事件監(jiān)聽器
this.init 58、ialFrame();//初始化窗體
}
public void initialComponent()
{
jps.setLayout(null);//設(shè)為空布局
jlPort.setBounds(40,180,100,20);
jps.add(jlPort);
jlPort1.setBounds(40,150,100,20);
jps.add(jlPort1);//添加用于提示輸入端口號的標(biāo)簽
this.jtfPort.setBounds(85,20,60,20);
this.jbStart.setBounds(50,50,80,20); 59、
jps.add(this.jbStart);//添加"開始"按鈕
this.jbStop.setBounds(50,100,80,20);
jps.add(this.jbStop);//添加"關(guān)閉"按鈕
this.jbStop.setEnabled(false);//將"關(guān)閉"按鈕設(shè)為不可用
}
public void addListener()
{
this.jbStart.addActionListener(this);//為"開始"按鈕注冊事件監(jiān)聽器
this.jbStop.addActionListener(this);//為"關(guān)閉" 60、按鈕注冊事件監(jiān)聽器
}
public void initialFrame()
{
this.setTitle("文件傳輸--服務(wù)器端");//設(shè)置窗體標(biāo)題
Image image=new ImageIcon("ico.gif").getImage();
this.setIconImage(image);
this.getContentPane().add(jspz);
jspz.setDividerLocation(250);
jspz.setDividerSize(4);//設(shè)置分割線的位置和寬度
this.setBounds(20,20 61、,420,320);
this.setVisible(true);//設(shè)置可見性
this.addWindowListener(//為窗體關(guān)閉事件注冊監(jiān)聽器
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(st==null)//當(dāng)服務(wù)器線程為空時(shí)直接退出
{
System.exit(0);//退出
return;
}
try
{
Vector v=online 62、List;
int size=v.size();
for(int i=0;i 63、t=null;
ss.close();//關(guān)閉ServerSocket
v.clear();//將在線用戶列表清空
refreshList();//刷新列表
}
catch(Exception ee)
{
ee.printStackTrace();
}
System.exit(0);//退出
}
}
);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()== 64、this.jbStart)
{//當(dāng)單擊"啟動(dòng)"按鈕時(shí)
this.jbStart_event();
}
else if(e.getSource()==this.jbStop)
{//單擊"關(guān)閉"按鈕后
this.jbStop_event();
}
}
public void jbStart_event()
{
//單擊"啟動(dòng)"按鈕的業(yè)務(wù)處理代碼
int port=0;
try
{
//獲得用戶輸入的端口號,并轉(zhuǎn)化為整型
port=Integer.parseInt(this.jtfPort.getT 65、ext().trim());
}
catch(Exception ee)
{//端口號不是整數(shù),給出提示信息
JOptionPane.showMessageDialog(this,"端口號只能是整數(shù)","錯(cuò)誤",
JOptionPane.ERROR_MESSAGE);
return;
}
if(port>65535||port<0)
{//斷口號不合法,給出提示信息
JOptionPane.showMessageDialog(this,"端口號只能是0-65535的 66、整數(shù)","錯(cuò)誤",
JOptionPane.ERROR_MESSAGE);
return;
}
try
{
this.jbStart.setEnabled(false);//將開始按鈕設(shè)為不可用
this.jtfPort.setEnabled(false);//將用于輸入端口號的文本框設(shè)為不可用
this.jbStop.setEnabled(true);//將停止按鈕設(shè)為可用
ss=new ServerSocket(port);//創(chuàng)建ServerSocket對象
st=new ServerThread(this);//創(chuàng)建服務(wù)器線程
st.start();//啟動(dòng)服務(wù)器線程
//給出服務(wù)器啟動(dòng)成功的提示信息
JOptionPane.showMessageDialog(this,"服務(wù)器啟動(dòng)成功","提示",
JOption
- 溫馨提示:
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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥事管理與法規(guī)楊世民第2版第一章
- 初中語法-形容詞和副詞
- 《公民的基本權(quán)利和義務(wù)》人教部編版道德與法治課件
- 五年級上冊音樂課件-豐收的節(jié)日(2)|人音版(簡譜)最新
- 企業(yè)家商業(yè)計(jì)劃培訓(xùn)教程75275
- 員工保密意識及技能教育培訓(xùn)課件
- [精選]CAINA肖爾布拉克營銷戰(zhàn)略規(guī)劃(PPT 174頁)5799
- 教育專題:18___跨越百年的美麗
- 北魏孝文帝的改革措施
- 教育專題:兒童防拐教案1
- 數(shù)據(jù)隔離級別
- 最新2018清新簡約工作匯報(bào)模板【ppt精美模板】
- 電子工藝第5章(精品)
- [精選]中化公司銷售培訓(xùn)77824
- (連云港專版)中考?xì)v史復(fù)習(xí) 第2單元 中國近代史 第9課時(shí) 抗日戰(zhàn)爭和人民解放戰(zhàn)爭的勝利課件 北師大版