![基于socket的文件傳輸軟件的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/ecee30e3-e103-47bd-a5e9-b37fd43c9a84/ecee30e3-e103-47bd-a5e9-b37fd43c9a841.gif)
![基于socket的文件傳輸軟件的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/ecee30e3-e103-47bd-a5e9-b37fd43c9a84/ecee30e3-e103-47bd-a5e9-b37fd43c9a842.gif)
![基于socket的文件傳輸軟件的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/ecee30e3-e103-47bd-a5e9-b37fd43c9a84/ecee30e3-e103-47bd-a5e9-b37fd43c9a843.gif)
![基于socket的文件傳輸軟件的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/ecee30e3-e103-47bd-a5e9-b37fd43c9a84/ecee30e3-e103-47bd-a5e9-b37fd43c9a844.gif)
![基于socket的文件傳輸軟件的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-5/1/ecee30e3-e103-47bd-a5e9-b37fd43c9a84/ecee30e3-e103-47bd-a5e9-b37fd43c9a845.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、哈爾濱工業(yè)大學(xué)課程結(jié)業(yè)報(bào)告姓名:陳琳學(xué)號(hào):09S003158所學(xué)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)課程名稱:網(wǎng)絡(luò)程序設(shè)計(jì)提交日期:2009-12-20目錄1基于TCP/IP及UDP的通信傳輸概述22 .系統(tǒng)體系結(jié)構(gòu)42.1 面向TCP連接系統(tǒng)調(diào)用過(guò)程52.2 面向UDP連接系統(tǒng)調(diào)用過(guò)程.6.3 .系統(tǒng)要求與功能實(shí)現(xiàn)63.1 公共類設(shè)計(jì)63.1.1 IP地址操作類63.1.2 DNS相關(guān)類73.2 TCP文件傳輸83.2.1 服務(wù)器端83.2.2 客戶端93.3 UDP文件傳輸103.3.1 服務(wù)器端113.3.2 客戶端123.4 線程池123.5 其它134試驗(yàn)結(jié)果135 .思考156 .結(jié)論和收獲16
2、基于socket套接字的文件傳輸軟件的設(shè)計(jì)與實(shí)現(xiàn)1.概述TCP/IP(TransmissionControlProtocol/InternetProtocol)的簡(jiǎn)寫,中文譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議,這個(gè)協(xié)議是Internet最基本的協(xié)議、Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),簡(jiǎn)單地說(shuō),就是由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成的。TCP/IP協(xié)議使用范圍極廣,是目前異種網(wǎng)絡(luò)通信使用的唯一協(xié)議體系,適用于連接多種機(jī)型,既可用于局域網(wǎng),又可用于廣域網(wǎng),許多廠商的計(jì)算機(jī)操作系統(tǒng)和網(wǎng)絡(luò)操作系統(tǒng)產(chǎn)品都采用或含有TCP/IP協(xié)議。TCP/IP協(xié)議已成為目前事實(shí)上的國(guó)際標(biāo)準(zhǔn)和工
3、業(yè)標(biāo)準(zhǔn)?;赥CP/IP協(xié)議組的網(wǎng)絡(luò)模型分為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層和物理層這樣五個(gè)層次。TCP/IP協(xié)議組位于應(yīng)用程序和硬件之間,指揮數(shù)據(jù)在網(wǎng)絡(luò)各層中傳遞。其中傳輸層的協(xié)議包括傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP),它們都建立在IP協(xié)議的基礎(chǔ)上,其中TCP®供可靠的面向連接服務(wù),UDPI供簡(jiǎn)單的無(wú)連接服務(wù)。傳輸層提供端到端,即應(yīng)用程序之間的通信,主要功能是數(shù)據(jù)格式化、數(shù)據(jù)確認(rèn)和丟失重傳等。TCP協(xié)議是面向連接的協(xié)議,它提供可靠的字節(jié)流服務(wù),在進(jìn)行數(shù)據(jù)傳輸之前必須先建立連接,經(jīng)三次握手確定后才開始數(shù)據(jù)傳送。UDP進(jìn)行數(shù)據(jù)報(bào)傳輸使用的是不可靠、無(wú)連接的協(xié)議。網(wǎng)絡(luò)層包括互
4、連網(wǎng)協(xié)議IP,互連網(wǎng)控制報(bào)文協(xié)議ICMP和互連網(wǎng)組管理協(xié)議IGMP其中IP協(xié)議完成大部分的工作,負(fù)責(zé)數(shù)據(jù)傳輸和路由的選擇等。IP報(bào)頭中的地址和網(wǎng)卡相聯(lián)系(具體還涉及地址解析和反向地址解析協(xié)議),TCP、UDP報(bào)頭中的端口號(hào)側(cè)對(duì)應(yīng)著網(wǎng)絡(luò)主機(jī)上不同的程序。TCP/IP體系結(jié)構(gòu)如圖一所示:目IF國(guó)AEF昌mF硬件接口圖一TCP/IP體系結(jié)構(gòu)Socket通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過(guò)"套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們
5、來(lái)開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。盡管TCP/IP協(xié)議的名稱中只有TCP這個(gè)協(xié)議名,但是在TCP/IP的傳輸層同時(shí)存在TC可DUDP兩個(gè)協(xié)議。TC比一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過(guò)TCPB議傳輸,得到的是一個(gè)順序的無(wú)差錯(cuò)的數(shù)據(jù)流。發(fā)送方和接收方的成對(duì)的兩個(gè)socket之間必須建立連接,以便在TCPB議的基礎(chǔ)上進(jìn)行通信,當(dāng)一個(gè)socket(通常都是serversocket)等待建立連接時(shí),另一個(gè)socket可以要求進(jìn)行連接,一旦這兩個(gè)socket連接起來(lái),它們就可以進(jìn)行雙向數(shù)據(jù)傳輸,雙方都可以進(jìn)行發(fā)送或接收操作。UDP1一種無(wú)連接的協(xié)議,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,包括完整的源地址或目
6、的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都是不能被保證的。本文在Scoket原理基礎(chǔ)上,基于.NET平臺(tái),利用線程池技術(shù),設(shè)計(jì)并實(shí)現(xiàn)了分別面向TCP和UDP的可靠文件傳輸軟件2.系統(tǒng)體系結(jié)構(gòu)根據(jù)采用的協(xié)議不同,本軟件分為基于TCP文件傳輸和基于UDP的可靠文件傳輸。在TCP/IP網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是C/S。在操作過(guò)程中采取的是主動(dòng)請(qǐng)示方式:首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù):1、打開一通信通道并告知本地主機(jī),它在某一個(gè)公認(rèn)地址上接收客戶請(qǐng)求;2、等待客戶請(qǐng)求到達(dá)該端口;3、接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送
7、應(yīng)答信號(hào);4、返回第2步,等待另一客戶請(qǐng)求;5、關(guān)閉服務(wù)器??蛻舳耍?、打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口;2、向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求3、請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。2.1面向TCP系統(tǒng)調(diào)用時(shí)序圖圖二面向TCP的系統(tǒng)時(shí)序圖2.2面向UDP系統(tǒng)調(diào)用時(shí)序圖圖三面向UDP的系統(tǒng)時(shí)序圖3.功能實(shí)現(xiàn)3.1 公共類設(shè)計(jì)軟件設(shè)計(jì)時(shí),TCP®UDP勺服務(wù)器端為統(tǒng)一界面,客戶端為統(tǒng)一界面。即服務(wù)器端既能夠接受TCP連接,也能通過(guò)UDP進(jìn)行接收;客戶端可以通過(guò)TCP和UDR!行傳輸。3.1.1 IP地址操作類1、IPAddress類在該類中有一個(gè)Parse
8、()方法,可以把點(diǎn)分的十進(jìn)制IP表示轉(zhuǎn)化IPAddress類,方法如下:IPAddressaddress=IPAddress.Parse(“9");IPAddress提供4個(gè)只讀字段Any用于代表本地系統(tǒng)可用的任何IP地址Broadcase用于代表本地網(wǎng)絡(luò)的IP廣播地址Loopback用于代表系統(tǒng)的回送地址None用于代表系統(tǒng)上沒(méi)有網(wǎng)絡(luò)接口其中IPAddress.Any最常用可以用來(lái)表示本機(jī)上所有的IP地址,這對(duì)于socket服務(wù)進(jìn)行偵聽時(shí)便使用,不用對(duì)每個(gè)IP進(jìn)行偵聽了。2、IPEndPoint類通過(guò)二種構(gòu)造方法來(lái)創(chuàng)建IPEndPoint類:a、IPEnd
9、Point(longaddress,intport)b、IPEndPoint(IPAddressaddress,intport)它有四個(gè)屬性:AddressAddressFamilyPortMaxPortMinPortIPEndPoint是一個(gè)IP地址和端口的綁定,可以代表一個(gè)服務(wù),用來(lái)Socket通訊。3.1.2 DNS相關(guān)類DN朋有四個(gè)靜態(tài)方法,來(lái)獲取主機(jī)DNSff關(guān)信息:1、GetHostName()通過(guò)Dns.GetHostName()可以獲得本地計(jì)算機(jī)的主機(jī)名2、GetHostByName()根據(jù)主機(jī)名稱,返回一個(gè)IPHostEntry對(duì)象:IPHostEntryGetHostByN
10、ame(stringhostName)。其中IPHostEntry把一個(gè)DNSi機(jī)名與一個(gè)別名和IP地址的數(shù)組相關(guān)聯(lián),包含三個(gè)屬性:AddressList:一個(gè)IPAddress對(duì)象的數(shù)組Aliases:一個(gè)字符串對(duì)象數(shù)組HostName一個(gè)用于主機(jī)名的字符串對(duì)象3、GetHostByAddress()類似于GetHostByName(),只不過(guò)這里的參數(shù)是IP地址,而不是主機(jī)名,也返回一個(gè)IPHostEntry對(duì)象。IPHostEntryGetHostByAddress(IPAddressaddress)IPHostEntryGetHostByAddress(stringaddress)4、
11、Resolve()當(dāng)不知道輸入的遠(yuǎn)程主機(jī)的地址是哪種格式時(shí)(主機(jī)名或IP地址),用以上的二種方法來(lái)實(shí)現(xiàn),可能還要通過(guò)判斷客戶輸入的格式,才能正確使用,但Dns類提供一更簡(jiǎn)單的方法Resolve(),該方法可以接受或者是主機(jī)名格式或者是IP地址格式的任何一種地址,并返回IPHostEntry對(duì)象。3.2 TCP文件傳輸3.2.1 服務(wù)器端1、創(chuàng)建IPEndPoint實(shí)例,用于Socket偵聽時(shí)綁定:IPEndPointipep=newIPEndPoint(IPAddress.Any,7000);2、創(chuàng)建套接字實(shí)例:serverSocket=newSocket(AddressFamily.Inte
12、rNetwork,SocketType.Stream,ProtocolType.Tcp);這里倉(cāng)建的時(shí)候用ProtocolType.Tcp,表示建立一個(gè)面向連接(TCP)的Socket。3、將所創(chuàng)建白套接字與IPEndPoint綁定:serverSocket.Bind(ipep)。4、設(shè)置套接字為收聽模式:serverSocket.Listen(10)。5、在套接字上接收接入的連接在此使用.net的線程池類,默認(rèn)情況下創(chuàng)建25個(gè)線程。從線城池中獲取一個(gè)線程來(lái)處理客戶端請(qǐng)求。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實(shí)例和套接字;2、將套接字連接到遠(yuǎn)程服務(wù)器;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類選擇文件,然后向服務(wù)器端傳送文件長(zhǎng)度和文件名,最后將需要傳送的文件切割成以單位為8k的數(shù)據(jù)塊進(jìn)行傳送。服務(wù)器端使用SaveFileDialog類選擇存儲(chǔ)文件的位置,然后接受客戶端發(fā)送的文件名和文件長(zhǎng)度,然后進(jìn)行小數(shù)據(jù)塊接受,使用循環(huán),直至客戶端發(fā)送完畢,服務(wù)器端在接受客戶端連接請(qǐng)求時(shí)開辟了一個(gè)內(nèi)存池。面向連接的程序流程圖如下所圖四面向TCP的程序流程圖3.3 UDP文件傳輸TCP是面向連接白1所以用TCP傳輸文件不會(huì)丟包。UDP®非面向連接的,所以UD呢不可靠的,用它傳輸文件,
16、要保證不丟包,就需要額外代碼來(lái)保障。本文采用的是在接受文件端來(lái)檢測(cè),當(dāng)開始接收文件,收到一個(gè)數(shù)據(jù)包后,如果等待超過(guò)了一定時(shí)間后都沒(méi)有收到數(shù)據(jù)包,就給發(fā)送方發(fā)送一個(gè)新的請(qǐng)求,要求繼續(xù)發(fā)送文件,直到文件全部接收完成。流程圖如下:圖五UDP傳輸流程3.3.1 服務(wù)器端在UDP服務(wù)器端設(shè)計(jì)過(guò)程中,部分步驟和實(shí)現(xiàn)代碼與TCP相似,在此不再贅述?;镜膶?shí)現(xiàn)步驟:1、創(chuàng)建一個(gè)socket,用函數(shù)socket。;2、綁定IP地址、端口等信息到socket±,用函數(shù)bind();3、循環(huán)接收數(shù)據(jù),用函數(shù)recvfrom();4、關(guān)閉網(wǎng)絡(luò)連接;為了實(shí)現(xiàn)UDP的可靠傳輸,設(shè)計(jì)了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類中加入一個(gè)記錄文件分塊接收狀態(tài)的列表Dictionary<int,bool>,int表示文件分塊的序號(hào),bool表示是否已經(jīng)接收,初始化為全部沒(méi)有接受(false)。2、在ReceiveFileManager類中加入一個(gè)Timer,用來(lái)檢測(cè)收到一個(gè)包后等待的時(shí)間是否超過(guò)了設(shè)置的值,超過(guò)就給發(fā)送方發(fā)送數(shù)據(jù)包,請(qǐng)求繼續(xù)發(fā)送文件,需要發(fā)送的文件塊序號(hào)為從Dictionary<int,bool>中查詢出來(lái)的沒(méi)有接收的文件塊序號(hào)。3、如果Dictionary<int,bool>中的所有文件塊已經(jīng)收到(全部為true)文件就接收完成了。3.3.2客戶端在UDP客戶端
19、設(shè)計(jì)過(guò)程中,部分步驟和實(shí)現(xiàn)代碼與TCP相似,在此不再贅述。基本的實(shí)現(xiàn)步驟:1、創(chuàng)建一個(gè)socket,用函數(shù)socket。;2、綁定IP地址、端口等信息到socket上,用函數(shù)bind();3、設(shè)置對(duì)方的IP地址和端口等屬性;4、發(fā)送數(shù)據(jù),用函數(shù)sendto();5、關(guān)閉網(wǎng)絡(luò)連接;為了保證UDP的可靠傳輸,客戶端也需要對(duì)服務(wù)器端某個(gè)端口的發(fā)送來(lái)的信息進(jìn)行監(jiān)控,一旦服務(wù)器請(qǐng)求,則進(jì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線程池通過(guò)System.Threading名稱空間的ThreadPool類來(lái)使用線程池,它所有的成員都是靜態(tài)的,而且沒(méi)有公開的構(gòu)造函數(shù)。這個(gè)限制的目的是為了把所有的異步編程技術(shù)都集中到同一個(gè)池中。假如構(gòu)造了含有兩個(gè)線程的線程池,當(dāng)三個(gè)請(qǐng)求到達(dá)時(shí),它們立刻安排到隊(duì)列等待被處理,因?yàn)閮蓚€(gè)線程都是空閑的,所以頭兩個(gè)請(qǐng)求開始執(zhí)行。當(dāng)其中任何一個(gè)請(qǐng)求處理結(jié)束后,空閑的線程就會(huì)去提取第三個(gè)請(qǐng)求并處理之。在這種場(chǎng)景中,系統(tǒng)不需要為每個(gè)請(qǐng)求創(chuàng)建和銷毀線程。線程之間能
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)電腦骨質(zhì)增生治療儀數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)汽輪機(jī)油過(guò)濾脫水設(shè)備數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)雙面壓花布數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)非吸收性外科縫線市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)gis地理信息系統(tǒng)市場(chǎng)調(diào)查研究報(bào)告
- 2025至2031年中國(guó)閥門配套密封件行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)皺紋漆行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)臺(tái)式電子計(jì)算器行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年中國(guó)靚膚祛黃保濕精油數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)耐水洗絨毛數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 動(dòng)物生產(chǎn)與流通環(huán)節(jié)檢疫(動(dòng)物防疫檢疫課件)
- 裝配式建筑預(yù)制構(gòu)件安裝-預(yù)制構(gòu)件的吊裝
- 英語(yǔ)主語(yǔ)從句省公開課一等獎(jiǎng)全國(guó)示范課微課金獎(jiǎng)?wù)n件
- 上海天文館分析
- 中醫(yī)睡眠養(yǎng)生中心方案
- 生活中的邏輯學(xué)
- 大學(xué)生返家鄉(xiāng)社會(huì)實(shí)踐報(bào)告
- 初中生物中考真題(合集)含答案
- 《醫(yī)學(xué)免疫學(xué)實(shí)驗(yàn)》課件
- C139客戶開發(fā)管理模型
- GB/T 5019.5-2023以云母為基的絕緣材料第5部分:電熱設(shè)備用硬質(zhì)云母板
評(píng)論
0/150
提交評(píng)論