




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、哈爾濱工業(yè)大學課程結業(yè)報告姓名:陳琳學號:09S003158所學專業(yè):計算機科學與技術課程名稱:網(wǎng)絡程序設計提交日期:2009-12-20目錄1基于TCP/IP及UDP的通信傳輸概述22 .系統(tǒng)體系結構42.1 面向TCP連接系統(tǒng)調(diào)用過程52.2 面向UDP連接系統(tǒng)調(diào)用過程.6.3 .系統(tǒng)要求與功能實現(xiàn)63.1 公共類設計63.1.1 IP地址操作類63.1.2 DNS相關類73.2 TCP文件傳輸83.2.1 服務器端83.2.2 客戶端93.3 UDP文件傳輸103.3.1 服務器端113.3.2 客戶端123.4 線程池123.5 其它134試驗結果135 .思考156 .結論和收獲16
2、基于socket套接字的文件傳輸軟件的設計與實現(xiàn)1.概述TCP/IP(TransmissionControlProtocol/InternetProtocol)的簡寫,中文譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又叫網(wǎng)絡通訊協(xié)議,這個協(xié)議是Internet最基本的協(xié)議、Internet國際互聯(lián)網(wǎng)絡的基礎,簡單地說,就是由網(wǎng)絡層的IP協(xié)議和傳輸層的TCP協(xié)議組成的。TCP/IP協(xié)議使用范圍極廣,是目前異種網(wǎng)絡通信使用的唯一協(xié)議體系,適用于連接多種機型,既可用于局域網(wǎng),又可用于廣域網(wǎng),許多廠商的計算機操作系統(tǒng)和網(wǎng)絡操作系統(tǒng)產(chǎn)品都采用或含有TCP/IP協(xié)議。TCP/IP協(xié)議已成為目前事實上的國際標準和工
3、業(yè)標準?;赥CP/IP協(xié)議組的網(wǎng)絡模型分為應用層、傳輸層、網(wǎng)絡層、鏈路層和物理層這樣五個層次。TCP/IP協(xié)議組位于應用程序和硬件之間,指揮數(shù)據(jù)在網(wǎng)絡各層中傳遞。其中傳輸層的協(xié)議包括傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報協(xié)議(UDP),它們都建立在IP協(xié)議的基礎上,其中TCP®供可靠的面向連接服務,UDPI供簡單的無連接服務。傳輸層提供端到端,即應用程序之間的通信,主要功能是數(shù)據(jù)格式化、數(shù)據(jù)確認和丟失重傳等。TCP協(xié)議是面向連接的協(xié)議,它提供可靠的字節(jié)流服務,在進行數(shù)據(jù)傳輸之前必須先建立連接,經(jīng)三次握手確定后才開始數(shù)據(jù)傳送。UDP進行數(shù)據(jù)報傳輸使用的是不可靠、無連接的協(xié)議。網(wǎng)絡層包括互
4、連網(wǎng)協(xié)議IP,互連網(wǎng)控制報文協(xié)議ICMP和互連網(wǎng)組管理協(xié)議IGMP其中IP協(xié)議完成大部分的工作,負責數(shù)據(jù)傳輸和路由的選擇等。IP報頭中的地址和網(wǎng)卡相聯(lián)系(具體還涉及地址解析和反向地址解析協(xié)議),TCP、UDP報頭中的端口號側對應著網(wǎng)絡主機上不同的程序。TCP/IP體系結構如圖一所示:目IF國AEF昌mF硬件接口圖一TCP/IP體系結構Socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字”向網(wǎng)絡發(fā)出請求或者應答網(wǎng)絡請求。Socket接口是TCP/IP網(wǎng)絡的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們
5、來開發(fā)TCP/IP網(wǎng)絡上的應用程序。盡管TCP/IP協(xié)議的名稱中只有TCP這個協(xié)議名,但是在TCP/IP的傳輸層同時存在TC可DUDP兩個協(xié)議。TC比一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過TCPB議傳輸,得到的是一個順序的無差錯的數(shù)據(jù)流。發(fā)送方和接收方的成對的兩個socket之間必須建立連接,以便在TCPB議的基礎上進行通信,當一個socket(通常都是serversocket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數(shù)據(jù)傳輸,雙方都可以進行發(fā)送或接收操作。UDP1一種無連接的協(xié)議,每個數(shù)據(jù)報都是一個獨立的信息,包括完整的源地址或目
6、的地址,它在網(wǎng)絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內(nèi)容的正確性都是不能被保證的。本文在Scoket原理基礎上,基于.NET平臺,利用線程池技術,設計并實現(xiàn)了分別面向TCP和UDP的可靠文件傳輸軟件2.系統(tǒng)體系結構根據(jù)采用的協(xié)議不同,本軟件分為基于TCP文件傳輸和基于UDP的可靠文件傳輸。在TCP/IP網(wǎng)絡中兩個進程間的相互作用的主機模式是C/S。在操作過程中采取的是主動請示方式:首先服務器方要先啟動,并根據(jù)請示提供相應服務:1、打開一通信通道并告知本地主機,它在某一個公認地址上接收客戶請求;2、等待客戶請求到達該端口;3、接收到重復服務請求,處理該請求并發(fā)送
7、應答信號;4、返回第2步,等待另一客戶請求;5、關閉服務器??蛻舳耍?、打開一通信通道,并連接到服務器所在主機的特定端口;2、向服務器發(fā)送服務請求報文,等待并接收應答;繼續(xù)提出請求3、請求結束后關閉通信通道并終止。2.1面向TCP系統(tǒng)調(diào)用時序圖圖二面向TCP的系統(tǒng)時序圖2.2面向UDP系統(tǒng)調(diào)用時序圖圖三面向UDP的系統(tǒng)時序圖3.功能實現(xiàn)3.1 公共類設計軟件設計時,TCP®UDP勺服務器端為統(tǒng)一界面,客戶端為統(tǒng)一界面。即服務器端既能夠接受TCP連接,也能通過UDP進行接收;客戶端可以通過TCP和UDR!行傳輸。3.1.1 IP地址操作類1、IPAddress類在該類中有一個Parse
8、()方法,可以把點分的十進制IP表示轉化IPAddress類,方法如下:IPAddressaddress=IPAddress.Parse(“9");IPAddress提供4個只讀字段Any用于代表本地系統(tǒng)可用的任何IP地址Broadcase用于代表本地網(wǎng)絡的IP廣播地址Loopback用于代表系統(tǒng)的回送地址None用于代表系統(tǒng)上沒有網(wǎng)絡接口其中IPAddress.Any最常用可以用來表示本機上所有的IP地址,這對于socket服務進行偵聽時便使用,不用對每個IP進行偵聽了。2、IPEndPoint類通過二種構造方法來創(chuàng)建IPEndPoint類:a、IPEnd
9、Point(longaddress,intport)b、IPEndPoint(IPAddressaddress,intport)它有四個屬性:AddressAddressFamilyPortMaxPortMinPortIPEndPoint是一個IP地址和端口的綁定,可以代表一個服務,用來Socket通訊。3.1.2 DNS相關類DN朋有四個靜態(tài)方法,來獲取主機DNSff關信息:1、GetHostName()通過Dns.GetHostName()可以獲得本地計算機的主機名2、GetHostByName()根據(jù)主機名稱,返回一個IPHostEntry對象:IPHostEntryGetHostByN
10、ame(stringhostName)。其中IPHostEntry把一個DNSi機名與一個別名和IP地址的數(shù)組相關聯(lián),包含三個屬性:AddressList:一個IPAddress對象的數(shù)組Aliases:一個字符串對象數(shù)組HostName一個用于主機名的字符串對象3、GetHostByAddress()類似于GetHostByName(),只不過這里的參數(shù)是IP地址,而不是主機名,也返回一個IPHostEntry對象。IPHostEntryGetHostByAddress(IPAddressaddress)IPHostEntryGetHostByAddress(stringaddress)4、
11、Resolve()當不知道輸入的遠程主機的地址是哪種格式時(主機名或IP地址),用以上的二種方法來實現(xiàn),可能還要通過判斷客戶輸入的格式,才能正確使用,但Dns類提供一更簡單的方法Resolve(),該方法可以接受或者是主機名格式或者是IP地址格式的任何一種地址,并返回IPHostEntry對象。3.2 TCP文件傳輸3.2.1 服務器端1、創(chuàng)建IPEndPoint實例,用于Socket偵聽時綁定:IPEndPointipep=newIPEndPoint(IPAddress.Any,7000);2、創(chuàng)建套接字實例:serverSocket=newSocket(AddressFamily.Inte
12、rNetwork,SocketType.Stream,ProtocolType.Tcp);這里倉建的時候用ProtocolType.Tcp,表示建立一個面向連接(TCP)的Socket。3、將所創(chuàng)建白套接字與IPEndPoint綁定:serverSocket.Bind(ipep)。4、設置套接字為收聽模式:serverSocket.Listen(10)。5、在套接字上接收接入的連接在此使用.net的線程池類,默認情況下創(chuàng)建25個線程。從線城池中獲取一個線程來處理客戶端請求。ThreadPool.QueueUserWorkItem。6、在套接字上接受客戶端發(fā)送的信息部分代碼:BinaryRead
13、erreader=newBinaryReader(client.GetStream();stringfilename=reader.ReadString();longtotal=reader.ReadInt64();stringsaveAs=GetSaveFile(filename);FileStreamfs=File.Create(saveAs);trybytebuffer=newbyte8192;intlen;while(total>0)(len=reader.Read(buffer,0,8192);if(len=0)thrownewIOException("發(fā)送方中止了連
14、接");fs.Write(buffer,0,len);3.2.2 客戶端1、創(chuàng)建IPEndPoint實例和套接字;2、將套接字連接到遠程服務器;clientSocket.Connect(ipep)3、發(fā)送信息FileInfofi=newFileInfo(textBox1.Text);writer.Write(fi.Name);writer.Write(fi.Length);FileStreamfs=fi.OpenRead();longtotal=fi.Length;bytebuffer=newbyte8192;intlen;while(len=fs.Read(buffer,0,819
15、2)!=0)(writer.Write(buffer,0,len);客戶端使用openFileDialog類選擇文件,然后向服務器端傳送文件長度和文件名,最后將需要傳送的文件切割成以單位為8k的數(shù)據(jù)塊進行傳送。服務器端使用SaveFileDialog類選擇存儲文件的位置,然后接受客戶端發(fā)送的文件名和文件長度,然后進行小數(shù)據(jù)塊接受,使用循環(huán),直至客戶端發(fā)送完畢,服務器端在接受客戶端連接請求時開辟了一個內(nèi)存池。面向連接的程序流程圖如下所圖四面向TCP的程序流程圖3.3 UDP文件傳輸TCP是面向連接白1所以用TCP傳輸文件不會丟包。UDP®非面向連接的,所以UD呢不可靠的,用它傳輸文件,
16、要保證不丟包,就需要額外代碼來保障。本文采用的是在接受文件端來檢測,當開始接收文件,收到一個數(shù)據(jù)包后,如果等待超過了一定時間后都沒有收到數(shù)據(jù)包,就給發(fā)送方發(fā)送一個新的請求,要求繼續(xù)發(fā)送文件,直到文件全部接收完成。流程圖如下:圖五UDP傳輸流程3.3.1 服務器端在UDP服務器端設計過程中,部分步驟和實現(xiàn)代碼與TCP相似,在此不再贅述?;镜膶崿F(xiàn)步驟:1、創(chuàng)建一個socket,用函數(shù)socket。;2、綁定IP地址、端口等信息到socket±,用函數(shù)bind();3、循環(huán)接收數(shù)據(jù),用函數(shù)recvfrom();4、關閉網(wǎng)絡連接;為了實現(xiàn)UDP的可靠傳輸,設計了ReceiveFileMan
17、ager類,如下圖所示:。HiBecei型皿yhCl15:l£FieldsBMethodsVDisposeb,VEjidVrite/GdF】l/amRG危tH電箕+ReceiweIndejcOxiE.eceiveFileComplete7OzRecelveFiieTivneoutVv«Buffer“R-eceiveFi1eMaitager(+1overl1*-。StartSEventsJR-ecfti甘電FileCoiftpieteJRe匚匕ivrfileTiineQut圖六ReceiveFileManager類可靠傳輸?shù)木唧w做法是:1、在ReceiveFileManage
18、r類中加入一個記錄文件分塊接收狀態(tài)的列表Dictionary<int,bool>,int表示文件分塊的序號,bool表示是否已經(jīng)接收,初始化為全部沒有接受(false)。2、在ReceiveFileManager類中加入一個Timer,用來檢測收到一個包后等待的時間是否超過了設置的值,超過就給發(fā)送方發(fā)送數(shù)據(jù)包,請求繼續(xù)發(fā)送文件,需要發(fā)送的文件塊序號為從Dictionary<int,bool>中查詢出來的沒有接收的文件塊序號。3、如果Dictionary<int,bool>中的所有文件塊已經(jīng)收到(全部為true)文件就接收完成了。3.3.2客戶端在UDP客戶端
19、設計過程中,部分步驟和實現(xiàn)代碼與TCP相似,在此不再贅述?;镜膶崿F(xiàn)步驟:1、創(chuàng)建一個socket,用函數(shù)socket。;2、綁定IP地址、端口等信息到socket上,用函數(shù)bind();3、設置對方的IP地址和端口等屬性;4、發(fā)送數(shù)據(jù),用函數(shù)sendto();5、關閉網(wǎng)絡連接;為了保證UDP的可靠傳輸,客戶端也需要對服務器端某個端口的發(fā)送來的信息進行監(jiān)控,一旦服務器請求,則進行重傳。IPEndPointremoteIP=newIPEndPoint(IPAddress.Any,0);bytebuffer=null;trybuffer=UdpClient.EndReceive(result,re
20、fremoteIP);catch(SocketExceptionex)throwex;finallyReceiveInternal();OnReceiveData(newReceiveDataEventArgs(buffer,remoteIP);3.4線程池通過System.Threading名稱空間的ThreadPool類來使用線程池,它所有的成員都是靜態(tài)的,而且沒有公開的構造函數(shù)。這個限制的目的是為了把所有的異步編程技術都集中到同一個池中。假如構造了含有兩個線程的線程池,當三個請求到達時,它們立刻安排到隊列等待被處理,因為兩個線程都是空閑的,所以頭兩個請求開始執(zhí)行。當其中任何一個請求處理結束后,空閑的線程就會去提取第三個請求并處理之。在這種場景中,系統(tǒng)不需要為每個請求創(chuàng)建和銷毀線程。線程之間能
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 度森林資源使用權轉讓合同
- 裝修工程勞動合同合同樣本
- 區(qū)域合作分銷合同協(xié)議
- 合同履行完畢確認聲明書
- 黃山風景區(qū)國內(nèi)旅游合同
- 私人借款合同樣本及還款細則
- 境外就業(yè)派遣合同
- 商業(yè)綜合體停車位租賃合同范本
- 商標糾紛和解合同細則
- 木材加工企業(yè)的品牌形象宣傳與公關活動考核試卷
- 國際商法 吳建斌課件 思考題答案
- 高等儀器分析第1章-緒論課件
- 怎樣聽課、評課課件
- 國家開放大學《現(xiàn)代漢語專題》章節(jié)自測參考答案
- 藥事管理與法規(guī)考試題庫及答案(可下載)
- 污水深度處理及中水回用工程施工方案
- 群體傷應急預案及搶救流程
- 2021年熔化焊與熱切割基礎知識課件
- 秒的認識 完整版PPT
- 創(chuàng)新藥產(chǎn)業(yè)鏈研究培訓框架
- (完整PPT)半導體物理與器件物理課件
評論
0/150
提交評論