文件傳輸軟件_第1頁
文件傳輸軟件_第2頁
文件傳輸軟件_第3頁
文件傳輸軟件_第4頁
文件傳輸軟件_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、科信學(xué)院通信軟件設(shè)計項目(二級項目)設(shè)計說明書(2014/2015學(xué)年第一學(xué)期)題 目 : 文件傳輸軟件 專業(yè)班級 : 通信工程11級1班 學(xué)生姓名 : 劉偉 張暢 學(xué) 號: 110312108 110312109 指導(dǎo)教師 : 陳湘國、 張龍、 任丹萍 設(shè)計周數(shù) : 1周 設(shè)計成績 : 2015年1月7日目錄1課程設(shè)計要求與任務(wù)21.1課程設(shè)計要求21.2課程設(shè)計任務(wù)22.課程設(shè)計正文32.1 課程設(shè)計項目分析32.1.1 軟件背景32.1.2 軟件原理32.1.3 TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)32.1.4套接字(Sockets)52.1.5 傳輸原理62.1.6 Socket編程72.2 課程

2、設(shè)計項目設(shè)計72.2.1 總體設(shè)計72.2.2 界面設(shè)計93課程設(shè)計問題分析93.1 通信的模式93.2 傳輸?shù)目煽啃?4課程設(shè)計總結(jié)105參考文獻(xiàn)101課程設(shè)計要求與任務(wù)1.1課程設(shè)計要求要求軟件能夠方便地實現(xiàn)局域網(wǎng)中主機之間的文件傳輸。為了可靠傳送文件,建議使用TCP提供的服務(wù)器??梢钥紤]采用C/S架構(gòu),可以采用Pull方式(客戶端主動獲取文件,服務(wù)器端被動地提供文件),也可以采用Push方式(客戶端主動發(fā)送文件,服務(wù)器端被動地接收文件)。也可以采用P2P架構(gòu)(稍微復(fù)雜,但更好用),例如使用UDP方式在對等方之間傳遞文本消息以及用于發(fā)起文件傳輸?shù)目刂菩畔?,實際進(jìn)行文件傳輸時仍通過TCP連接

3、進(jìn)行?;驹O(shè)計思路是先建立TCP連接,連接成功后,發(fā)送文件的一方從文件流讀取數(shù)據(jù),寫入網(wǎng)絡(luò)流,接收方讀取網(wǎng)絡(luò)流,寫入文件流,完成后斷開TCP連接,釋放相關(guān)的資源。1.2課程設(shè)計任務(wù)1、深入理解TCP的工作原理和服務(wù)的特性,掌握TCP套接字編程機制和方法;2、理解C/S架構(gòu),理解Pull和Push兩種文件傳輸模式; 3、深入分析文件發(fā)送方和接收方的程序運行流程,繪制程序流程圖; 4、學(xué)習(xí)使用OpenFileDialog、SaveFileDialog、FileStream;5、完成服務(wù)器端軟件和客戶端軟件的開發(fā)和測試;6、按照格式要求撰寫設(shè)計報告。2.課程設(shè)計正文2.1 課程設(shè)計項目分析2.1.1

4、 軟件背景隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,計算機通信給人類文明帶來了翻天覆地的變化。很多情況下,人們的日常工作需要借助文件傳輸來完成。但大多數(shù)文件傳輸功能都需要借助移動磁盤等硬件設(shè)備或Internet上的服務(wù)器才能實現(xiàn)。這就給那些具有大規(guī)模內(nèi)部網(wǎng)絡(luò)的用戶造成了許多問題,如浪費資金、浪費網(wǎng)絡(luò)資源、病毒入侵、降低了工作效率等。為了方便局域網(wǎng)內(nèi)主機的資源共享,需要開發(fā)一個基于局域網(wǎng)的文件傳輸工具,在內(nèi)部網(wǎng)絡(luò)中實現(xiàn)文件交換。則可以大大方便局域網(wǎng)內(nèi)主機的資源共享。2.1.2 軟件原理基于局域網(wǎng)的文件傳輸系統(tǒng)的設(shè)計選用Virtual Studio 2005 為開發(fā)工具,基于TCP/IP的協(xié)議,用套接字來實現(xiàn)文件

5、的傳輸。以TCP服務(wù)器模式通過建立Socket連接后實現(xiàn)局域網(wǎng)快速,準(zhǔn)確,安全的點對點文件以及文件夾傳輸功能。2.1.3 TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)TCP/IP協(xié)議采用層次體系結(jié)構(gòu),如圖2-1所示,從圖中可以看出,每一層在邏輯上都與通信端的對應(yīng)層相連接。圖中所示的服務(wù)器程序持續(xù)監(jiān)聽通信客戶端;客戶端僅周期性地與服務(wù)器相連接以交換數(shù)據(jù),其中TCP協(xié)議層提供相當(dāng)于OSI參考模型中傳輸層的服務(wù),為收、發(fā)端應(yīng)用程序提供通信;IP協(xié)議層負(fù)責(zé)提供統(tǒng)一的數(shù)據(jù)報;鏈路層主要功能是收、發(fā)IP層的IP數(shù)據(jù)報;TCP/IP之上是該協(xié)議提供的各種服務(wù),而底層網(wǎng)絡(luò)可以是不同的物理網(wǎng)絡(luò),如Ethernet、Token Ri

6、ng、X.25公共分組交換網(wǎng)等。圖2-1 TCP/IP協(xié)議層模型(LAN)針對于所要求設(shè)計的軟件最終目的:實現(xiàn)局域網(wǎng)中主機之間的文件傳輸這一功能,考慮到可靠的傳送文件,我們選擇使用TCP提供的服務(wù)器。對于TCP傳輸協(xié)議及其工作原理,敘述如下:TCP,傳輸控制協(xié)議(Transport Control Protocol),是一種面向連接的、可靠的傳輸層協(xié)議。面向連接指其一次正常的TCP傳輸需要通過在TCP客戶端和TCP服務(wù)端建立特定的虛電路連接來完成,該過程通常被稱為“三次握手”??煽啃钥梢酝ㄟ^很多種方法來提供保證,在這里我們關(guān)心的是數(shù)據(jù)序列和確認(rèn)。TCP通過數(shù)據(jù)分段(Segment)中的序列號保

7、證所有傳輸?shù)臄?shù)據(jù)可以在遠(yuǎn)端按照正常的次序進(jìn)行重組,而且通過確認(rèn)保證數(shù)據(jù)傳輸?shù)耐暾?,并提供擁塞控制機制,當(dāng)網(wǎng)絡(luò)擁塞時,源抑制其傳輸速率。要通過TCP傳輸數(shù)據(jù),必須在兩端主機之間建立連接。TCP連接建立過程如圖2-2所示。圖2-2 TCP連接建立過程2.1.4套接字(Sockets)套接字(Sockets)最早是由Berkeley大學(xué)提出在UNIX操作系統(tǒng)下實現(xiàn)TCP/IP通信協(xié)議的開發(fā)接口,隨著Internet在全球范圍內(nèi)的廣泛使用,Sockets已成為網(wǎng)絡(luò)編程的通用接口。Microsoft公司以Sockets為基礎(chǔ)開發(fā)的Winsock建立了Windows環(huán)境下網(wǎng)絡(luò)間的編程接口。套接字是對網(wǎng)絡(luò)

8、中不同主機上應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點的抽象,一個套接口就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議棧交換數(shù)據(jù)的機制。套接字可以分為流式套接字(Stream Sockets)、數(shù)據(jù)報套接字(Datagram Sockets)和原始套接字(Raw Sockets)。流式套接字最常用的套接字,提供面向連接的、無差錯的、發(fā)送順序一致的、包長度不限和非重復(fù)的網(wǎng)絡(luò)信息的傳輸;數(shù)據(jù)報套接字提供無連接的服務(wù),以獨立的數(shù)據(jù)報進(jìn)行傳輸,不保證順序性、可靠性和無重復(fù)性;原始套接字提供對下層網(wǎng)絡(luò)的通信協(xié)議的訪問,主要用于開發(fā)新的協(xié)議或用于提取較隱蔽的功能。在程序設(shè)計中我們選擇流式套接字摟完成C/S模式

9、的通信,保證數(shù)據(jù)能夠準(zhǔn)確、無誤的傳輸。圖2-3所示的是流式套接字的基本通信方式。圖2-3 面向連接的流方式2.1.5 傳輸原理應(yīng)用程序的網(wǎng)絡(luò)通信是利用相同的通途協(xié)議來完成信息的傳輸。應(yīng)用程序和Winsock都是工作在Windows的用戶模式下,操作系統(tǒng)不僅僅通過Winsock,還需要底層的支持。套接字仿真器(套接字核心驅(qū)動程序)和傳輸驅(qū)動程序接口,起到了Winsock和傳輸協(xié)議之間的通信橋梁作用。Winsock是網(wǎng)絡(luò)通信應(yīng)用程序于套接字仿真器間的接口,TDI是套接字仿真器和傳輸協(xié)議間的接口套接字核心模式,驅(qū)動程序復(fù)雜連接和緩沖區(qū)管理,以便向應(yīng)用程序提供套接字仿真(在AFDSYS文件中實現(xiàn)),同

10、時負(fù)責(zé)與底層傳輸驅(qū)動程序?qū)υ拏鬏旘?qū)動程序接口(TDI)負(fù)責(zé)核心模式驅(qū)動程序與傳輸協(xié)議間的通信。 當(dāng)應(yīng)用程序利用Winsock發(fā)送和接收數(shù)據(jù)時,是由核心模式驅(qū)動程序AFDSYS負(fù)責(zé)管理發(fā)送和接收緩沖區(qū)來發(fā)送和接收數(shù)據(jù)。當(dāng)應(yīng)用程序調(diào)用send或WSASend函數(shù)來發(fā)送數(shù)據(jù)時,AFDSYS在后臺負(fù)責(zé)把數(shù)據(jù)復(fù)制進(jìn)他自己的發(fā)送緩沖區(qū),然后send或WSASend函數(shù)立即返回,AFDSYS在后臺把數(shù)據(jù)發(fā)送出去,遠(yuǎn)程客戶端接收數(shù)據(jù)的情況也類似,由接收方的AFDSYS在后臺負(fù)責(zé)把數(shù)據(jù)復(fù)制到自己的接收緩沖區(qū),然后應(yīng)用程序調(diào)用recv或WSARecv函數(shù)來接收數(shù)據(jù)時,把數(shù)據(jù)由AFDSYS管理的接收緩沖區(qū)復(fù)制到應(yīng)用

11、程序提供的緩沖區(qū)中。AFDSYS管理的發(fā)送緩沖區(qū)SO-SNDBUF和接收緩沖區(qū)SO-RECVBUF在缺省時兩個緩沖區(qū)的大小都為8,192個字節(jié),但可以根據(jù)實際要求由應(yīng)用程序設(shè)定,由于我們傳輸?shù)膶ο笫谴髷?shù)據(jù)量文件,因此需要對系統(tǒng)的發(fā)送緩沖區(qū)和接收緩沖區(qū)作相應(yīng)的設(shè)定,以保障大數(shù)據(jù)量的文件數(shù)據(jù)的發(fā)送的接收。2.1.6 Socket編程Socket編程是建立在應(yīng)用層TCP/IP協(xié)議之上的。目前最流行的是客戶機/服務(wù)器模式,在面向連接的 Client/Server 模型中,Server 端的 socket 總是等待一個 Client 端的請求??蛻魴C/服務(wù)器模型的工作流程圖如下圖2-4所示:圖2-4 客

12、戶機/服務(wù)器模型的工作流程(1)服務(wù)器(接收方)程序特點: 一般啟動后就一直處于運行狀態(tài),以等待客戶機進(jìn)程的請求; 使用的端口往往是熟知端口,便于客戶機進(jìn)程連接請求; 一般擁有較多的系統(tǒng)資源,以便及時響應(yīng)各個客戶機進(jìn)程的請求; 可以并行處理多個客戶機進(jìn)程的請求,但數(shù)目是有一定的限制; 在通信時一般處于被動的一方,不需要知道客戶機的IP地址和端口信息。(2)客戶機(發(fā)送方)程序的特點: 在需要服務(wù)器進(jìn)程的服務(wù)時將向服務(wù)器進(jìn)程請求服務(wù),并建立通信連接,得到滿足并完成處理后就終止通信連接; 使用向系統(tǒng)申請的臨時端口與服務(wù)器進(jìn)程進(jìn)行通信,通信完成后將釋放該端口; 擁有相對較少的系統(tǒng)資源; 在通信時屬于

13、主動的一方,需要事先知道服務(wù)器的IP地址和端口信息2.2 課程設(shè)計項目設(shè)計2.2.1 總體設(shè)計本程序的文件傳輸系統(tǒng)的實現(xiàn)應(yīng)包含服務(wù)端模塊、客戶端模塊、界面顯示模塊等幾個部分,整個程序采用VC+6.0完成,通信部分采用WINSOCK。程序使用流式套接字,基于C/S模型。在設(shè)計GUI界面時把客戶端和服務(wù)端放在一個界面中,根據(jù)用戶需要將程序設(shè)置成客戶端和服務(wù)端。服務(wù)器和客戶機的基本流程如圖2-5所示。在通信的時候主要可以分為兩個部分,一個部分是控制信息的傳輸部分,而另一個部分就是文件的傳輸部分。傳送的控制信息可以包含發(fā)送文件的請求,文件的名稱、大小等,由于這方面的數(shù)據(jù)量比較小,因此采用了MFC所提供

14、的CSocket類的串行化技術(shù)來實現(xiàn)。對于文件的傳輸,由于數(shù)據(jù)量相對來說比較大,所以用兩個線程來實現(xiàn)文件的傳輸,一個線程用于發(fā)送,一個線程用于接收。圖2-5是一個成功的文件傳輸過程的流程。 客戶機服務(wù)器 創(chuàng)建CClientSocket類的對象創(chuàng)建CServerSocket類的對象將sockets與本地IP和相應(yīng)的端口綁定Connect(),將套接字與服務(wù)器相連是否有連接到服務(wù)器?Listen(),監(jiān)聽來自客戶端的連接否顯示錯誤信息接收客戶端的連接請求不為客戶端建立連接,顯示錯誤信息是否有建立連接?ReceiveMsg/()SendMsg(),在套接字上收發(fā)信息是否 為客戶端建立連接 Recei

15、veMsg/()SendMsg(),在套接字上收發(fā)信息圖2-5 服務(wù)器和客戶機的基本流程2.2.2 界面設(shè)計此次文件傳輸軟件界面設(shè)計如圖2-6所示。軟件設(shè)計大致有三模塊組成:首先,兩臺主機IP模塊,再者則是文件傳輸區(qū),包括文件的選擇、接收與發(fā)送;最后,作為完善,增加了聊天區(qū)域,完善了單純文件傳輸功能這一弊端,使軟件更實用化。圖2-3 文件傳輸軟件設(shè)計圖3課程設(shè)計問題分析3.1 通信的模式由于是實現(xiàn)點對點的文件傳輸,因此在程序中我們使用的是C/S的模式來實現(xiàn)通信。對于C/S的模式,即分為客戶端和服務(wù)端。服務(wù)端用來接收客戶端的連接,實現(xiàn)兩端之間互相傳輸文件。采用C/S的模式可以更好的體現(xiàn)程序的功能

16、設(shè)計思想,充分調(diào)用在LAN中的server和client兩方面的處理能力,極大的減少網(wǎng)絡(luò)上的信息流通量。C/S體系結(jié)構(gòu)有可能提供一種開放式的、易伸縮擴展的分布式計算機環(huán)境,并保護(hù)硬件等投資。3.2 傳輸?shù)目煽啃砸雽崿F(xiàn)文件的可靠性傳輸,可以使用流式套接字。因為流式套接字提供面向連接的、無差錯的、發(fā)送順序一致的、包長度不限和非重復(fù)的網(wǎng)絡(luò)信息的傳輸,能提供更好的可靠性。而對于數(shù)據(jù)報套接字提供的是無連接的服務(wù),以獨立的數(shù)據(jù)報進(jìn)行傳輸,不保證順序性、可靠性和無重復(fù)性,相比之下用流式套接字能提供更好的的可靠性傳輸。4課程設(shè)計總結(jié)通過此次的課程設(shè)計,我學(xué)到了很多,理論知識很重要,因為它決定了設(shè)計的方法及程

17、序最終是否成功,所以就需要查找很多資料,有足夠的耐心、細(xì)心去研究問題,解決問題,同時還必須有實事求是地分析問題的態(tài)度,知道理論與實際是有一些差別的。而通過查資料和搜集有關(guān)的文獻(xiàn),培養(yǎng)了自學(xué)能力和動手能力,由曾經(jīng)被動的接受知識轉(zhuǎn)換為主動的尋求知識,這可以說是學(xué)習(xí)方法上的一個很大的突破。測試的過程中要有平和的心態(tài),遇見問題是很正常的,自己需要做的就是多做比較和分析,逐步的排除可能的原因,要堅信“凡事都是有辦法解決的”和“問題出現(xiàn)一定有它的原因”,這樣最后一定能調(diào)試成功。報告的寫作過程中也學(xué)到了做任何事情所要有的態(tài)度和心態(tài)。首先我明白了做學(xué)問要一絲不茍,對于出現(xiàn)的任何問題和偏差都不要輕視,要通過正確

18、的途徑去解決,在做事情的過程中要有耐心和毅力,不要一遇到困難就打退堂鼓,只要堅持下去就可以找到思路去解決問題的。在工作中要學(xué)會與人合作的態(tài)度,認(rèn)真聽取別人的意見,這樣做起事情來就可以事倍功半??傊?,此次課程設(shè)計,我收獲了很多,更加清楚地知道了TCP的工作原理以及服務(wù)特性,掌握了TCP套接字的編程機制和方法。我相信通過這一次的體驗與鍛煉,對我們今后的學(xué)習(xí)及對事物的看法有很大幫助,相信今后會做得更好!5參考文獻(xiàn)1 邱錦倫,曹旻.Visual C#.NET程序設(shè)計教程M.清華大學(xué)出版社,2006.92 馬駿,鄭逢斌,沈夏炯. C#網(wǎng)絡(luò)應(yīng)用高級編程M.人民郵電出版社,2006.103 邵麗萍,張后揚,

19、郭春芳.網(wǎng)站編程技術(shù)實用教程. 第一版.清華大學(xué)出社,2005年1月課程論文評語:成 績評閱教師簽名評閱日期 年 月 日附錄:程序源代碼public class Userpublic UserSession commandSession get;set;public UserSession dataSession get;set;public TcpListener dataListener get;set;/主動模式下使用的客戶端監(jiān)聽IPEndpointpublic IPEndpoint remoteEndpoint get;set;/用戶名public string userName ge

20、t;set;/初始工作目錄public string workDir get;set;/當(dāng)前工作目錄public string CurrentDir get;set;/初始狀態(tài)為等待輸入用戶名public int LoginOK get;set;/是否使用二進(jìn)制傳輸方式public bool isBinary get;set;/數(shù)據(jù)連接使用的是否是被動連接public bool isPassive get;set; (1)在解決方案資源管理器中,用鼠標(biāo)右擊項目名,選擇【添加】【類】,添加一個類文件UserSession.cs,用于保存連接設(shè)置。代碼如下:public class UserSes

21、sionpublic NetworkStream networkStream;public readonly StreamReader sr;public readonly StreamWriter sw;public readonly TcpClient client;public readonly BinaryReader br;public readonly BinaryWriter bw;public UserSession(TcpClient client)this.client = client;networkStream = client.GetStream();sr = new

22、 StreamReader(networkStream,Encoding.Default);sw = new StreamWriter(networkStream,Encoding.Default);sw.AutoFlush = true;br = new BinaryReader(networkStream,Encoding.Default);bw = new BinaryWriter(networkStream,Encoding.Default);public void Close()client.Client.Shutdown(SocketShutdown.Both);client.cl

23、ient.Close();client.Close();(2) 切換到FormMain的代碼編輯方式下,添加對應(yīng)按鈕的Click事件以及其他代碼,源程序如下:public partial class MainForm : FormTcpListener myTcpListener;Dictionary<string,string>users;/保存用戶名和密碼public MainForm()InitializeComponent();/為簡單起見,此處假設(shè)已經(jīng)有MyTestName用戶,密碼12345users = new Dictionary<string,string&

24、gt;();users.Add("mytestName","12345");/設(shè)置默認(rèn)目錄textBox1.Text = "e:/1s/"/<summary>單擊【啟動FTP服務(wù)】觸發(fā)事件</summary>private void buttonStart_Click(object sender,EventArgs e)this.listBoxStatus.Items.Add("FTP服務(wù)已啟動");Thread t = new Thread(ListenClientConnect);t.I

25、sBackground = true;t.Start();buttonStart.Enabled = false;buttonStop.Enabled = true;/<summary>監(jiān)聽端口,處理客戶端連接</summary>private void ListenClientConnect()myTcpListener = new TcpListener(IPAddress.Any,21);myTcpListener.Start();while(true)tryTcpClient client = myTcpListener.AcceptTcpClient();Ad

26、dInfo(string.Format("0和本機(1)建立FTP連接", client.Client.RemoteEndpoint,myTcpListener.Loca1Endpoint);User user = new User();mandSession = new UserSession(client);user.workDir = textBox1.Text;Thread t = new Thread(UserProcessing);t.IsBackground=true;t.Start(user);catchbreak/<summary>/處理USER命令,但不進(jìn)行用戶名驗證/</summary>/<param name="user">客戶端信息</param>/<param name="command">命令</param>/<param name="param">參數(shù)</param>p

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論