




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、科信學院通信軟件設計項目(二級項目)設計說明書(2014/2015學年第一學期)題 目 : 文件傳輸軟件 專業(yè)班級 : 通信工程11級1班 學生姓名 : 劉偉 張暢 學 號: 110312108 110312109 指導教師 : 陳湘國、 張龍、 任丹萍 設計周數(shù) : 1周 設計成績 : 2015年1月7日目錄1課程設計要求與任務21.1課程設計要求21.2課程設計任務22.課程設計正文32.1 課程設計項目分析32.1.1 軟件背景32.1.2 軟件原理32.1.3 TCP/IP網(wǎng)絡體系結構32.1.4套接字(Sockets)52.1.5 傳輸原理62.1.6 Socket編程72.2 課程
2、設計項目設計72.2.1 總體設計72.2.2 界面設計93課程設計問題分析93.1 通信的模式93.2 傳輸?shù)目煽啃?4課程設計總結105參考文獻101課程設計要求與任務1.1課程設計要求要求軟件能夠方便地實現(xiàn)局域網(wǎng)中主機之間的文件傳輸。為了可靠傳送文件,建議使用TCP提供的服務器??梢钥紤]采用C/S架構,可以采用Pull方式(客戶端主動獲取文件,服務器端被動地提供文件),也可以采用Push方式(客戶端主動發(fā)送文件,服務器端被動地接收文件)。也可以采用P2P架構(稍微復雜,但更好用),例如使用UDP方式在對等方之間傳遞文本消息以及用于發(fā)起文件傳輸?shù)目刂菩畔?,實際進行文件傳輸時仍通過TCP連接
3、進行?;驹O計思路是先建立TCP連接,連接成功后,發(fā)送文件的一方從文件流讀取數(shù)據(jù),寫入網(wǎng)絡流,接收方讀取網(wǎng)絡流,寫入文件流,完成后斷開TCP連接,釋放相關的資源。1.2課程設計任務1、深入理解TCP的工作原理和服務的特性,掌握TCP套接字編程機制和方法;2、理解C/S架構,理解Pull和Push兩種文件傳輸模式; 3、深入分析文件發(fā)送方和接收方的程序運行流程,繪制程序流程圖; 4、學習使用OpenFileDialog、SaveFileDialog、FileStream;5、完成服務器端軟件和客戶端軟件的開發(fā)和測試;6、按照格式要求撰寫設計報告。2.課程設計正文2.1 課程設計項目分析2.1.1
4、 軟件背景隨著互聯(lián)網(wǎng)技術的迅猛發(fā)展,計算機通信給人類文明帶來了翻天覆地的變化。很多情況下,人們的日常工作需要借助文件傳輸來完成。但大多數(shù)文件傳輸功能都需要借助移動磁盤等硬件設備或Internet上的服務器才能實現(xiàn)。這就給那些具有大規(guī)模內部網(wǎng)絡的用戶造成了許多問題,如浪費資金、浪費網(wǎng)絡資源、病毒入侵、降低了工作效率等。為了方便局域網(wǎng)內主機的資源共享,需要開發(fā)一個基于局域網(wǎng)的文件傳輸工具,在內部網(wǎng)絡中實現(xiàn)文件交換。則可以大大方便局域網(wǎng)內主機的資源共享。2.1.2 軟件原理基于局域網(wǎng)的文件傳輸系統(tǒng)的設計選用Virtual Studio 2005 為開發(fā)工具,基于TCP/IP的協(xié)議,用套接字來實現(xiàn)文件
5、的傳輸。以TCP服務器模式通過建立Socket連接后實現(xiàn)局域網(wǎng)快速,準確,安全的點對點文件以及文件夾傳輸功能。2.1.3 TCP/IP網(wǎng)絡體系結構TCP/IP協(xié)議采用層次體系結構,如圖2-1所示,從圖中可以看出,每一層在邏輯上都與通信端的對應層相連接。圖中所示的服務器程序持續(xù)監(jiān)聽通信客戶端;客戶端僅周期性地與服務器相連接以交換數(shù)據(jù),其中TCP協(xié)議層提供相當于OSI參考模型中傳輸層的服務,為收、發(fā)端應用程序提供通信;IP協(xié)議層負責提供統(tǒng)一的數(shù)據(jù)報;鏈路層主要功能是收、發(fā)IP層的IP數(shù)據(jù)報;TCP/IP之上是該協(xié)議提供的各種服務,而底層網(wǎng)絡可以是不同的物理網(wǎng)絡,如Ethernet、Token Ri
6、ng、X.25公共分組交換網(wǎng)等。圖2-1 TCP/IP協(xié)議層模型(LAN)針對于所要求設計的軟件最終目的:實現(xiàn)局域網(wǎng)中主機之間的文件傳輸這一功能,考慮到可靠的傳送文件,我們選擇使用TCP提供的服務器。對于TCP傳輸協(xié)議及其工作原理,敘述如下:TCP,傳輸控制協(xié)議(Transport Control Protocol),是一種面向連接的、可靠的傳輸層協(xié)議。面向連接指其一次正常的TCP傳輸需要通過在TCP客戶端和TCP服務端建立特定的虛電路連接來完成,該過程通常被稱為“三次握手”??煽啃钥梢酝ㄟ^很多種方法來提供保證,在這里我們關心的是數(shù)據(jù)序列和確認。TCP通過數(shù)據(jù)分段(Segment)中的序列號保
7、證所有傳輸?shù)臄?shù)據(jù)可以在遠端按照正常的次序進行重組,而且通過確認保證數(shù)據(jù)傳輸?shù)耐暾裕⑻峁砣刂茩C制,當網(wǎng)絡擁塞時,源抑制其傳輸速率。要通過TCP傳輸數(shù)據(jù),必須在兩端主機之間建立連接。TCP連接建立過程如圖2-2所示。圖2-2 TCP連接建立過程2.1.4套接字(Sockets)套接字(Sockets)最早是由Berkeley大學提出在UNIX操作系統(tǒng)下實現(xiàn)TCP/IP通信協(xié)議的開發(fā)接口,隨著Internet在全球范圍內的廣泛使用,Sockets已成為網(wǎng)絡編程的通用接口。Microsoft公司以Sockets為基礎開發(fā)的Winsock建立了Windows環(huán)境下網(wǎng)絡間的編程接口。套接字是對網(wǎng)絡
8、中不同主機上應用進程之間進行雙向通信的端點的抽象,一個套接口就是網(wǎng)絡上進程通信的一端,提供了應用層進程利用網(wǎng)絡協(xié)議棧交換數(shù)據(jù)的機制。套接字可以分為流式套接字(Stream Sockets)、數(shù)據(jù)報套接字(Datagram Sockets)和原始套接字(Raw Sockets)。流式套接字最常用的套接字,提供面向連接的、無差錯的、發(fā)送順序一致的、包長度不限和非重復的網(wǎng)絡信息的傳輸;數(shù)據(jù)報套接字提供無連接的服務,以獨立的數(shù)據(jù)報進行傳輸,不保證順序性、可靠性和無重復性;原始套接字提供對下層網(wǎng)絡的通信協(xié)議的訪問,主要用于開發(fā)新的協(xié)議或用于提取較隱蔽的功能。在程序設計中我們選擇流式套接字摟完成C/S模式
9、的通信,保證數(shù)據(jù)能夠準確、無誤的傳輸。圖2-3所示的是流式套接字的基本通信方式。圖2-3 面向連接的流方式2.1.5 傳輸原理應用程序的網(wǎng)絡通信是利用相同的通途協(xié)議來完成信息的傳輸。應用程序和Winsock都是工作在Windows的用戶模式下,操作系統(tǒng)不僅僅通過Winsock,還需要底層的支持。套接字仿真器(套接字核心驅動程序)和傳輸驅動程序接口,起到了Winsock和傳輸協(xié)議之間的通信橋梁作用。Winsock是網(wǎng)絡通信應用程序于套接字仿真器間的接口,TDI是套接字仿真器和傳輸協(xié)議間的接口套接字核心模式,驅動程序復雜連接和緩沖區(qū)管理,以便向應用程序提供套接字仿真(在AFDSYS文件中實現(xiàn)),同
10、時負責與底層傳輸驅動程序對話傳輸驅動程序接口(TDI)負責核心模式驅動程序與傳輸協(xié)議間的通信。 當應用程序利用Winsock發(fā)送和接收數(shù)據(jù)時,是由核心模式驅動程序AFDSYS負責管理發(fā)送和接收緩沖區(qū)來發(fā)送和接收數(shù)據(jù)。當應用程序調用send或WSASend函數(shù)來發(fā)送數(shù)據(jù)時,AFDSYS在后臺負責把數(shù)據(jù)復制進他自己的發(fā)送緩沖區(qū),然后send或WSASend函數(shù)立即返回,AFDSYS在后臺把數(shù)據(jù)發(fā)送出去,遠程客戶端接收數(shù)據(jù)的情況也類似,由接收方的AFDSYS在后臺負責把數(shù)據(jù)復制到自己的接收緩沖區(qū),然后應用程序調用recv或WSARecv函數(shù)來接收數(shù)據(jù)時,把數(shù)據(jù)由AFDSYS管理的接收緩沖區(qū)復制到應用
11、程序提供的緩沖區(qū)中。AFDSYS管理的發(fā)送緩沖區(qū)SO-SNDBUF和接收緩沖區(qū)SO-RECVBUF在缺省時兩個緩沖區(qū)的大小都為8,192個字節(jié),但可以根據(jù)實際要求由應用程序設定,由于我們傳輸?shù)膶ο笫谴髷?shù)據(jù)量文件,因此需要對系統(tǒng)的發(fā)送緩沖區(qū)和接收緩沖區(qū)作相應的設定,以保障大數(shù)據(jù)量的文件數(shù)據(jù)的發(fā)送的接收。2.1.6 Socket編程Socket編程是建立在應用層TCP/IP協(xié)議之上的。目前最流行的是客戶機/服務器模式,在面向連接的 Client/Server 模型中,Server 端的 socket 總是等待一個 Client 端的請求??蛻魴C/服務器模型的工作流程圖如下圖2-4所示:圖2-4 客
12、戶機/服務器模型的工作流程(1)服務器(接收方)程序特點: 一般啟動后就一直處于運行狀態(tài),以等待客戶機進程的請求; 使用的端口往往是熟知端口,便于客戶機進程連接請求; 一般擁有較多的系統(tǒng)資源,以便及時響應各個客戶機進程的請求; 可以并行處理多個客戶機進程的請求,但數(shù)目是有一定的限制; 在通信時一般處于被動的一方,不需要知道客戶機的IP地址和端口信息。(2)客戶機(發(fā)送方)程序的特點: 在需要服務器進程的服務時將向服務器進程請求服務,并建立通信連接,得到滿足并完成處理后就終止通信連接; 使用向系統(tǒng)申請的臨時端口與服務器進程進行通信,通信完成后將釋放該端口; 擁有相對較少的系統(tǒng)資源; 在通信時屬于
13、主動的一方,需要事先知道服務器的IP地址和端口信息2.2 課程設計項目設計2.2.1 總體設計本程序的文件傳輸系統(tǒng)的實現(xiàn)應包含服務端模塊、客戶端模塊、界面顯示模塊等幾個部分,整個程序采用VC+6.0完成,通信部分采用WINSOCK。程序使用流式套接字,基于C/S模型。在設計GUI界面時把客戶端和服務端放在一個界面中,根據(jù)用戶需要將程序設置成客戶端和服務端。服務器和客戶機的基本流程如圖2-5所示。在通信的時候主要可以分為兩個部分,一個部分是控制信息的傳輸部分,而另一個部分就是文件的傳輸部分。傳送的控制信息可以包含發(fā)送文件的請求,文件的名稱、大小等,由于這方面的數(shù)據(jù)量比較小,因此采用了MFC所提供
14、的CSocket類的串行化技術來實現(xiàn)。對于文件的傳輸,由于數(shù)據(jù)量相對來說比較大,所以用兩個線程來實現(xiàn)文件的傳輸,一個線程用于發(fā)送,一個線程用于接收。圖2-5是一個成功的文件傳輸過程的流程。 客戶機服務器 創(chuàng)建CClientSocket類的對象創(chuàng)建CServerSocket類的對象將sockets與本地IP和相應的端口綁定Connect(),將套接字與服務器相連是否有連接到服務器?Listen(),監(jiān)聽來自客戶端的連接否顯示錯誤信息接收客戶端的連接請求不為客戶端建立連接,顯示錯誤信息是否有建立連接?ReceiveMsg/()SendMsg(),在套接字上收發(fā)信息是否 為客戶端建立連接 Recei
15、veMsg/()SendMsg(),在套接字上收發(fā)信息圖2-5 服務器和客戶機的基本流程2.2.2 界面設計此次文件傳輸軟件界面設計如圖2-6所示。軟件設計大致有三模塊組成:首先,兩臺主機IP模塊,再者則是文件傳輸區(qū),包括文件的選擇、接收與發(fā)送;最后,作為完善,增加了聊天區(qū)域,完善了單純文件傳輸功能這一弊端,使軟件更實用化。圖2-3 文件傳輸軟件設計圖3課程設計問題分析3.1 通信的模式由于是實現(xiàn)點對點的文件傳輸,因此在程序中我們使用的是C/S的模式來實現(xiàn)通信。對于C/S的模式,即分為客戶端和服務端。服務端用來接收客戶端的連接,實現(xiàn)兩端之間互相傳輸文件。采用C/S的模式可以更好的體現(xiàn)程序的功能
16、設計思想,充分調用在LAN中的server和client兩方面的處理能力,極大的減少網(wǎng)絡上的信息流通量。C/S體系結構有可能提供一種開放式的、易伸縮擴展的分布式計算機環(huán)境,并保護硬件等投資。3.2 傳輸?shù)目煽啃砸雽崿F(xiàn)文件的可靠性傳輸,可以使用流式套接字。因為流式套接字提供面向連接的、無差錯的、發(fā)送順序一致的、包長度不限和非重復的網(wǎng)絡信息的傳輸,能提供更好的可靠性。而對于數(shù)據(jù)報套接字提供的是無連接的服務,以獨立的數(shù)據(jù)報進行傳輸,不保證順序性、可靠性和無重復性,相比之下用流式套接字能提供更好的的可靠性傳輸。4課程設計總結通過此次的課程設計,我學到了很多,理論知識很重要,因為它決定了設計的方法及程
17、序最終是否成功,所以就需要查找很多資料,有足夠的耐心、細心去研究問題,解決問題,同時還必須有實事求是地分析問題的態(tài)度,知道理論與實際是有一些差別的。而通過查資料和搜集有關的文獻,培養(yǎng)了自學能力和動手能力,由曾經(jīng)被動的接受知識轉換為主動的尋求知識,這可以說是學習方法上的一個很大的突破。測試的過程中要有平和的心態(tài),遇見問題是很正常的,自己需要做的就是多做比較和分析,逐步的排除可能的原因,要堅信“凡事都是有辦法解決的”和“問題出現(xiàn)一定有它的原因”,這樣最后一定能調試成功。報告的寫作過程中也學到了做任何事情所要有的態(tài)度和心態(tài)。首先我明白了做學問要一絲不茍,對于出現(xiàn)的任何問題和偏差都不要輕視,要通過正確
18、的途徑去解決,在做事情的過程中要有耐心和毅力,不要一遇到困難就打退堂鼓,只要堅持下去就可以找到思路去解決問題的。在工作中要學會與人合作的態(tài)度,認真聽取別人的意見,這樣做起事情來就可以事倍功半??傊舜握n程設計,我收獲了很多,更加清楚地知道了TCP的工作原理以及服務特性,掌握了TCP套接字的編程機制和方法。我相信通過這一次的體驗與鍛煉,對我們今后的學習及對事物的看法有很大幫助,相信今后會做得更好!5參考文獻1 邱錦倫,曹旻.Visual C#.NET程序設計教程M.清華大學出版社,2006.92 馬駿,鄭逢斌,沈夏炯. C#網(wǎng)絡應用高級編程M.人民郵電出版社,2006.103 邵麗萍,張后揚,
19、郭春芳.網(wǎng)站編程技術實用教程. 第一版.清華大學出社,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;/當前工作目錄public string CurrentDir get;set;/初始狀態(tài)為等待輸入用戶名public int LoginOK get;set;/是否使用二進制傳輸方式public bool isBinary get;set;/數(shù)據(jù)連接使用的是否是被動連接public bool isPassive get;set; (1)在解決方案資源管理器中,用鼠標右擊項目名,選擇【添加】【類】,添加一個類文件UserSession.cs,用于保存連接設置。代碼如下: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的代碼編輯方式下,添加對應按鈕的Click事件以及其他代碼,源程序如下:public partial class MainForm : FormTcpListener myTcpListener;Dictionary<string,string>users;/保存用戶名和密碼public MainForm()InitializeComponent();/為簡單起見,此處假設已經(jīng)有MyTestName用戶,密碼12345users = new Dictionary<string,string&
24、gt;();users.Add("mytestName","12345");/設置默認目錄textBox1.Text = "e:/1s/"/<summary>單擊【啟動FTP服務】觸發(fā)事件</summary>private void buttonStart_Click(object sender,EventArgs e)this.listBoxStatus.Items.Add("FTP服務已啟動");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命令,但不進行用戶名驗證/</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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 法律服務行業(yè)法律顧問服務協(xié)議
- 產(chǎn)業(yè)園物業(yè)服務合同
- 古詩文登高解讀與教學方案設計
- 個人權益保護網(wǎng)絡平臺使用協(xié)議
- 企業(yè)級網(wǎng)絡安全預防預案
- 裝修工程擔保合同
- 《宋代書法欣賞:大學書法藝術課程教案》
- 在線教育行業(yè)分析模擬試題集
- 股權擔保協(xié)議書規(guī)范
- 企業(yè)社會責任年度演講致辭草稿
- 服裝倉庫管理制度及流程
- 架子工安全教育培訓試題(附答案)
- 《高血壓5項化驗》課件
- 一中師德考核評估制度
- 肋骨骨折護理個案查房
- 分布式網(wǎng)絡處理方案
- CNAS-CL02-A001:2023 醫(yī)學實驗室質量和能力認可準則的應用要求
- 血管外科護理課件
- 鐵路機車檢修坑施工方案
- 數(shù)字化轉型中的知識管理
- 安徽高中畢業(yè)生登記表
評論
0/150
提交評論