趙娟
[摘要]文章論述了一個(gè)基于CS(客戶服務(wù)器)模型的簡單文件傳輸系統(tǒng)的設(shè)計(jì)與開發(fā)。系統(tǒng)從功能上分為客戶端和服務(wù)器兩部分,客戶端和服務(wù)器之間的通信是通過Socket套接字流來實(shí)現(xiàn)。實(shí)現(xiàn)的功能分別是:文件的上傳及下載;網(wǎng)絡(luò)傳輸部分主要實(shí)現(xiàn)服務(wù)器和客戶端的連接建立、握手通信協(xié)議通信、文件列表的傳輸。
[關(guān)鍵詞]Java;客戶/服務(wù)器模型;文件傳輸;Socket
[DOI]1013939/jcnkizgsc201550242
1引言
21世紀(jì)是網(wǎng)絡(luò)的時(shí)代,是信息的時(shí)代,是多媒體的時(shí)代。互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展與普及,推動(dòng)了世界范圍的信息傳輸和信息交流。文件傳輸是互聯(lián)網(wǎng)上使用較多的服務(wù)之一,用戶可以通過與互聯(lián)網(wǎng)相連的計(jì)算機(jī),從互聯(lián)網(wǎng)獲得自己需要的文件?,F(xiàn)在,已經(jīng)有許多互聯(lián)網(wǎng)站點(diǎn)都建立了可供大眾訪問的資料庫,這些資料都可以通過一定的數(shù)據(jù)傳輸協(xié)議被用戶獲取。目前已有FTP、Socket、P2P等多種網(wǎng)絡(luò)數(shù)據(jù)傳輸通信協(xié)議,并產(chǎn)生了像CuteFTP、Flashget、迅雷等一批優(yōu)秀的文件傳輸軟件。但是使用FTP、P2P協(xié)議進(jìn)行文件傳輸需要服務(wù)器端進(jìn)行復(fù)雜的配置或者運(yùn)行特殊的軟件才能進(jìn)行,Socket是基于客戶/服務(wù)器模型的TCP/IP網(wǎng)絡(luò)通信協(xié)議,它只需通過一個(gè)IP地址和端口號就可以在服務(wù)器和客戶程序之間建立穩(wěn)定的數(shù)據(jù)傳輸通道,操作和配置都比較簡單。
2Socket工作原理
Socket是計(jì)算機(jī)進(jìn)行通信的端口,是TCP協(xié)議應(yīng)用程序設(shè)計(jì)中的一個(gè)重要概念。我們建立的網(wǎng)絡(luò)通信程序?qū)嶋H上可以看作不同機(jī)器中的不同的兩個(gè)應(yīng)用程序之間的通信,收發(fā)傳遞信息我們必須知道對方的準(zhǔn)確位置。
Socket通信機(jī)制提供了兩種通信方式:有連接方式和無連接方式,分別面向不同的應(yīng)用需求。使用有連接方式,通信鏈路提供了可靠的全雙工的字節(jié)流服務(wù),在該方式下,通信雙方必須創(chuàng)建一個(gè)連接過程并建立一條通信鏈路,以后的網(wǎng)絡(luò)通信操作完全在這一對進(jìn)程之間進(jìn)行,通信完畢關(guān)閉此連接過程。使用無連接方式時(shí),其系統(tǒng)開銷比連接方式要小,但通信鏈路提供了不可靠的數(shù)據(jù)服務(wù),不能保證信源所傳輸?shù)臄?shù)據(jù)一定能到達(dá)信宿,在該方式下,通信雙方不必建立一個(gè)連接過程和一條通信鏈路,網(wǎng)絡(luò)操作在不同的主機(jī)和進(jìn)程之間轉(zhuǎn)發(fā)進(jìn)行。
圖1Socket通信的原理
3文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
Java的Socket支持類:Socket和ServerSocket類庫位于javanet包中,ServerSocket用于服務(wù)器端,Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對于一個(gè)網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因?yàn)樵诜?wù)器端或在客戶端而產(chǎn)生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。
服務(wù)器端功能模塊主要在類Host Servers里定義,它實(shí)現(xiàn)了本系統(tǒng)服務(wù)器的大部分功能;客戶端功能模塊主要在類Custom Servers里定義,實(shí)現(xiàn)了客戶端的多數(shù)功能;客戶端和服務(wù)器端公共模塊,如文件的收發(fā)、服務(wù)狀態(tài)的設(shè)置等,則放在它們的父類AbstractNetServers中作實(shí)現(xiàn),以提高代碼的復(fù)用性。
用戶界面部分目的是實(shí)現(xiàn)用戶界面元素的組織及對用戶界面元素的事件處理,調(diào)用網(wǎng)絡(luò)傳輸相關(guān)部分,實(shí)現(xiàn)文件的上傳及下載。用戶界面部分根據(jù)顯示內(nèi)容可以分為:主窗口、菜單和工具欄、用戶面板(主要是根據(jù)客戶端和服務(wù)器端不同,顯示不同的用戶界面組件內(nèi)容)及文件列表顯示幾個(gè)部分,這幾個(gè)部分的內(nèi)容都使用J2SE標(biāo)準(zhǔn)GUI庫Swing組件包的控件實(shí)現(xiàn)。
系統(tǒng)的GUI部分分為3個(gè)模塊:菜單和工具欄模塊、模式選擇模塊和文件列表顯示模塊,以及一個(gè)啟動(dòng)類Main Frame。Main Frame類是整個(gè)程序的入口類,其中包含了Java啟動(dòng)的main方法。在這類中主要是底層用戶窗口框架的初始化。菜單和工具欄模塊功能主要是在類Menu And Toolbar類里實(shí)現(xiàn)。這個(gè)類里按照Swing添加菜單和工具欄的方法,對程序的菜單欄和工具欄進(jìn)行初始化,并添加菜單欄和工具欄控件的事件監(jiān)聽器和實(shí)現(xiàn)相應(yīng)事件的處理方法。文件列表顯示模塊主要功能都在類File Tree Panel中,主要是用來顯示本機(jī)的文件系統(tǒng)結(jié)構(gòu)和服務(wù)器共享目錄的文件結(jié)構(gòu),供用戶作一些選擇操作。
整個(gè)系統(tǒng)的體系結(jié)構(gòu)如圖2所示:
4結(jié)論
本文討論了使用Java的Socket接口開發(fā)一個(gè)簡單文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),在一個(gè)程序內(nèi)對系統(tǒng)的客戶端和服務(wù)器端進(jìn)行開發(fā),最終實(shí)現(xiàn)了文件的上傳、下載,文件列表的網(wǎng)絡(luò)傳輸?shù)纫粋€(gè)文件傳輸系統(tǒng)的基本功能,并且同時(shí)實(shí)現(xiàn)了客戶端和服務(wù)器端在運(yùn)行時(shí)的動(dòng)態(tài)切換。系統(tǒng)在開發(fā)過程中還有一些不足,希望在以后更加完善。
參考文獻(xiàn):
[1]謝安明,邵美珍使用Socket設(shè)計(jì)網(wǎng)絡(luò)通訊程序[J].信息工程大學(xué)學(xué)報(bào),2001(1):156-158
[2]何進(jìn),謝松巍基于Socket的TCP/IP網(wǎng)絡(luò)通訊模式研究[J].計(jì)算機(jī)應(yīng)用研究,2001(8):123-125
[3]曾雅琳,郭斌基于Java的GUI設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2005(10):213-214
[4]張?jiān)迄i,楊景常基于TCP/IP協(xié)議的單片機(jī)系統(tǒng)以太網(wǎng)通訊設(shè)計(jì)與實(shí)現(xiàn)[J].西華大學(xué)學(xué)報(bào)(自然科學(xué)版),2004(S1):234-238