利用Socket實現雙機通信計算機網絡課程設計_第1頁
利用Socket實現雙機通信計算機網絡課程設計_第2頁
利用Socket實現雙機通信計算機網絡課程設計_第3頁
利用Socket實現雙機通信計算機網絡課程設計_第4頁
利用Socket實現雙機通信計算機網絡課程設計_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1、目錄1I、1,I2、題目,23、設計任務,24、WinSocket簡介及特點原理,,,25、TCP簡介及特點原理,,,36、VisualC+簡介,,,77、設計方案,88、系統的原理框圖和程序流程圖,109、實驗中的問題,,,1410、實驗結果及分析,,,1411、課程設計的總結體會,,,1612、參考文獻,16利用Socket實現雙機通信一、設計任務1 .利用WinSock來實現雙機通信,理解TCP狀態機圖。2 .要求使用WinSock編程,采用其中的TCP面向連接方式,實現文本數據的交換。二、WinSocket簡介及特點原理2.1、 什么是socket所謂socket通常也稱作&quo

2、t;套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。Socket接口是TCP/IP網絡的API,Socket接口定義了許多函數或例程,程序員可以用它們來開發TCP/IP網絡上的應用程序。要學Internet上的TCP/IP網絡編程,必須理解Socket接口。Socket接口設計者最先是將接口放在Unix操作系統里面的。如果了解Unix系統的輸入和輸出的話,就很容易了解Socket了。網絡的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似于打開文件的函數

3、調用Socket(),該函數返回一個整型的Socket描述符,隨后的連接建立、數據傳輸等操作都是通過該Socket實現的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM數據報式Socket(SOCK_DGR)AMO流式是一種面向連接的Socket,針對于面向連接的TCP服務應用;數據報式Socket是一種無連接的Socket,對應于無連接的UDP服務應用。最重要的是,socket是面向客戶/服務器模型而設計的,針對客戶和服務器程序提供不同的socket系統調用。客戶隨機申請一個socket(相當于一個想打電話的人可以在任何一臺入網電話上撥號呼叫),系統為之分配一個soc

4、ket號;服務器擁有全局公認的socket,任何客戶都可以向它發出連接請求和信息請求(相當于一個被呼叫的電話擁有一個呼叫方知道的電話號碼)Osocket利用客戶/服務器模式巧妙地解決了進程之間建立通信連接的問題。服務器socket半相關為全局所公認非常重要。不妨考慮一下,兩個完全隨機的用戶進程之間如何建立通信?假如通信雙方沒有任何一方的socket固定,就好比打電話的雙方彼此不知道對方的電話號碼,要通話是不可能的。2.2、 WinSocket的通信原理WinSock是一個基于Socket模型的API。WinSock在Windows98,WindowNT中使用。WinSock一般由兩部分組成:開

5、發組件和運行組件。開發組件是供程序員在windows環境下開發網絡應用程序使用的,它包括應用程序接口庫函數、頭文件和實現的文檔,其中最主要的是WINSOCK.H運行組件是以動態鏈接庫(DlL)來實現socket接口的。文件名為WINSOCK.DL應用程序在執行時裝入它就能實現網絡通信功能三、TCP簡介及特點原理1 .什么是TCPTCP是一種面向連接(連接導向)的、可靠的、基于字節流的運輸層(Transportlayer)通信協議。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能。在因特網協議族(Internetprotocolsuite)中,TCP層是位于IP層之上,應用層之下的

6、中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。應用層向TCP層發送用于網間傳輸的、用8位字節表示的數據流,然后TCP把數據流分割成適當長度的報文段(通常受該計算機連接的網絡的數據鏈路層的最大傳送單元(MTU)的限制)。之后TCP把結果包傳給IP層,由它來通過網絡將包傳送給接收端實體的TCP層。TCP為了保證不發生丟包,就給每個字節一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的字節發回一個相應的確認(ACK);如果發送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數據(假設丟失

7、了)將會被重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和。首先,TCP建立連接之后,通信雙方都同時可以進行數據的傳輸,其次,他是全雙工的;在保證可靠性上,采用超時重傳和捎帶確認機制。在流量控制上,采用滑動窗口協議,協議中規定,對于窗口內未經確認的分組需要重傳。在擁塞控制上,采用慢啟動算法。2 .TCP功能提供計算機程序間連接、檢測和丟棄重復的分組、完成數據報的確認、流量控制和網絡擁塞。3 .TCP所提供服務的主要特點(1)面向連接的傳輸;(2)端到端的通信;(3)高可靠性,確保傳輸數據的正確性,不出現丟失或亂序;(4)全雙工方式傳輸;(5)采用字節流方式,即以字

8、節為單位傳輸字節序列;(6)緊急數據傳送功能。4 .TCP支持的服務器類型不管怎樣,TCP/IP是一個協議集。為應用提供一些"低級"功能,這些包括IP、TCP、UDPo其它是執行特定任務的應用協議,如計算機間傳送文件、發送電子郵件、或找出誰注冊到另外一臺計算機。因此,最重要的"商業'叮CP/IP服務有:文件傳送FileTransfer遠程登錄Remotelogin計算機郵件Mail網絡文件系統(NFS)遠程打印(Remoteprinting)遠程執行(Remoteexecution)名字月艮務器(Nameservers)終端月艮務器(Terminalser

9、vers)5 .TCP的端口號TCP段結構中端口地址都是16比特,可以有在065535范圍內的端口號。對于這65536個端口號有以下的使用規定:(1)端口號小于256的定義為常用端口,服務器一般都是通過常用端口號來識別的。任何TCP/IP實現所提供的服務都用11023之間的端口號,是由IANA來管理的;(2)客戶端只需保證該端口號在本機上是惟一的就可以了。客戶端口號因存在時間很短暫又稱臨時端口號;(3)大多數TCP/IP實現給臨時端口號分配10245000之間的端口號。大于5000的端口號是為其他服務器預留的。6 .TCP協議是如何確保數據傳輸高可靠性為了保證可靠性,發送的報文都有遞增的序列號

10、。序列號和確認號用來確保傳輸的可靠性。止匕外,對每個報文都設立一個定時器,設定一個最大時延。對那些超過最大時延仍沒有收到確認信息的報文就認為已經丟失,需要重傳。7 .TCP的服務流程TCP協議提供的是可靠的、面向連接的傳輸控制協議,即在傳輸數據前要先建立邏輯連接,然后再傳輸數據,最后釋放連接3個過程。TCP提供端到端、全雙工通信;采用字節流方式,如果字節流太長,將其分段;提供緊急數據傳送功能。盡管TCP和UDP都使用相同的網絡層(IP),TCP卻向應用層提供與UDP完全不同的服務。TCP提供一種面向連接的、可靠的字節流服務。面向連接意味著兩個使用TCP的應用(通常是一個客戶和一個服務器)在彼此

11、交換數據之前必須先建立一個TCP連接。這一過程與打電話很相似,先撥號振鈴,等待對方摘機說“喂”,然后才說明是誰。在一個TCP連接中,僅有兩方進行彼此通信。廣播和多播不能用于TCPoTCP通過下列方式來提供可靠性:?應用數據被分割成TCP認為最適合發送的數據塊。這和UDP完全不同,應用程序產生的數據報長度將保持不變。由TCP傳遞給IP的信息單位稱為報文段或段(segment)TCP如何確定報文段的長度。?當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。?當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送

12、,通常將推遲幾分之一秒?TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時并重發)。?既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。?既然IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。?TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發送接收端緩沖區所能接納的數據。這將防止較快主

13、機致使較慢主機的緩沖區溢出。兩個應用程序通過TCP連接交換8bit字節構成的字節流。TCP不在字節流中插入記錄標識符。我們將這稱為字節流服務(bytestreamservice)。如果一方的應用程序先傳10字節,又傳20字節,再傳50字節,連接的另一方將無法了解發方每次發送了多少字節。收方可以分4次接收這80個字節,每次接收20字節。一端將字節流放到TCP連接上,同樣的字節流將出現在TCP連接的另一端。另外,TCP對字節流的內容不作任何解釋。TCP不知道傳輸的數據字節流是二進制數據,還是ASCII字符、EBCDIC字符或者其他類型數據。對字節流的解釋由TCP連接雙方的應用層解釋。這種對字節流的

14、處理方式與Unix操作系統對文件的處理方式很相似。Unix的內核對一個應用讀或寫的內容不作任何解釋,而是交給應用程序處理。對Unix的內核來說,它無法區分一個二進制文件與一個文本文件。TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求后,等待對方回答SYN,ACK。這種建立連接的方法可以防止產生錯誤的連接,TCP使用的流量控制協議是可變大小的滑動窗口協議。第一次握手:建立連接時,客戶端發送SYN包(SEQ=x)到服務器,并進入SYN_SEND狀態,等待服務器確認。第二次握手:服務器收到SYN包,必須確認客戶的SYN(ACK=x+1),同時自己也送一個SYN包(S

15、EQ=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態。第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ACK=y+1),此包發送完畢,客戶端和服務器時入Established狀態,完成三次握手。四、VisualC+簡介VisualC+是一個功能強大的可視化軟件開發工具。自1993年Microsoft公司推出VisualC+1.0后,隨著其新版本的不斷問世,VisualC+已成為專業程序員進行軟件開發的首選工具。雖然微軟公司推出了VisualC+.NET(VisualC+7.0),但它的應用的很大的局限性,只適用于Windows2000,WindowsXP

16、和WindowsNT4.0。所以實際中,更多的是以VisualC+6.0為平臺。VisualC+它大概可以分成三個主要的部分:1、DeveloperStudio,這是一個集成開發環境,我們日常工作的99%都是在它上面完成的,再加上它的標題赫然寫著“MicrosoftVisualC+,所”以很多人理所當然的認為,那就是VisualC+了。其實不然,雖然DeveloperStudio提供了一個很好的編輯器和很多Wizard,但實際上它沒有任何編譯和鏈接程序的功能,真正完成這些工作的幕后英雄后面會介紹。我們也知道,DeveloperStudio并不是專門用于VC的,它也同樣用于VB,VJ,VID等V

17、isualStudio家族的其他同胞兄弟。所以不要把DeveloperStudio當成VisualC+,它充其量只是VisualC+的一個殼子而已。2、 MFC。從理論上來講,MFC也不是專用于VisualC+,BorlandC+,C+Builder和SymantecC+同樣可以處理MFC。同時,用VisualC+編寫代碼也并不意味著一定要用MFC,只要愿意,用VisualC+來編寫SDK程序,或者使用STL,ATL,一樣沒有限制。不過,VisualC+本來就是為MFC打造的,VisualC+中的許多特征和語言擴展也是為MFC而設計的,所以用VisualC+而不用MFC就等于拋充了Visual

18、C+中很大的一部分功能。但是,VisualC+也不等于MFC。3、 PlatformSDK。這才是VisualC+和整個VisualStudio的精華和靈魂,雖然我們很少能直接接觸到它。大致說來,PlatformSDK是以MicrosoftC/C+編譯器為核心(不是VisualC+,看清楚了),配合MASM,輔以其他一些工具和文檔資料。上面說到DeveloperStudio沒有編譯程序的功能,那么這項工作是由誰來完成的呢?是CL,是NMAKE,和其他許許多多命令行程序,這些我們看不到的程序才是構成VisualStudio的基石。五、設計方案5.1WinSocket通信的步驟:1.在服務器端的應

19、用程序中的網絡通信的步驟如下:(1)建立服務器端的Socket,開始偵聽整個網絡中的連接請求。(2)當檢測到來自客戶端的連接請求時,向客戶端發送收到連接請求的信息,并建立與客戶端之間的連接,再繼續進入監聽狀態。(3)在監聽的過程中,如果有用戶發出了請求,則服務器會產生一個新的連接Socket來處理用戶的請求,而原來的Socket仍然會進行監聽操作,(4)當完成通信后,服務器關閉與客戶端的Socket連接。2.在客戶端應用程序中的網絡通信的步驟如下:(1)建立一個客戶端的Socket。(2)從命令行中得到服務器的名字,并進行查詢以得到服務器的IP地址;(3)從命令行中得到服務器所提供的端口號,以

20、便進行下一步的操作;(4)發送連接請求到服務器,并等待服務器的回饋信息。(5)連接成功后,與服務器進行數據的交互。(6)數據處理完畢后,關閉自身的Socket連接,釋放進行連接所分配的資源,客戶端的程序運行完畢。5.2、程序中用到的過程函數介紹如下:1、Socket過程Socket過程創建一個套接字并返回一個整型描述符:Descriptor=socket(protofamilytypeprotocol)其中表示TCP/IP協議系列protofamily:AF-INETtype:SOCK_STREAM表示面向連接的流傳輸SOCK_DGRA徵示無連接的面向消息傳輸Protocol:一般情況下為02

21、、Bind過程在套接字被創建之后,服務器使用Bind過程提供一個傳輸層地址,服務器將通過它等待通信。Bind(socketlocaladdraddrlen)其中:socket是一個套接字的描述符localaddr是將要賦予套接字的本地地址,是sockaddr結構。Addrlen是本地地址的長度3、Listen過程服務器調用Listen過程將套接字設為被動模式以使它能被用來等待客戶的通信。Listen(socketqueuesize)其中:socket是一個套接字的描述符queuesize表示該套接字的請求隊列的長度,請求隊列的存在允許系統在服務器正在處理上一個請求時保存到達的其它請求。4、Co

22、nnect過程客戶使用Connect過程與指定服務器建立連接。Connect(socketsaddresssaddresslen)其中:socket是客戶端計算機上用于該連接的套接字的描述符saddress是服務器地址與協議端口號,是sockaddr結構saddresslen是saddress的長度5、Accept過程服務器調用Accept過程來接受客戶的一個連接請求newsock=accept(socketcaddresscaddresslen)其中:socket是服務器已經創建并聯編于指定協議端口的套接字的描述符caddress用于存放客戶端的地址,是sockaddr結構caddressl

23、en是一個指向整型的指針,用于存放caddress的長度6、Send過程如果套接字已連接,send過程可用來傳輸數據。Send(socketdatalengthflags)其中:socket是使用的服務器/客戶套接字的描述符data是待發送數據在內存中的地址length表示數據的字節數flags包含了請求特殊選項的位,做系統調試用。7、Recv過程一個應用可以條用recv從一個連接的套接字接收數據。Recv(socketbufferlengthflags)其中:socket是從中接收數據的服務器/客戶套接字的描述符buffer表示內存中用來存放接收數據的地址length表示緩沖區的大小flag

24、s包含了請求特殊選項的位,做系統調試用。8、Close過程Close過程告訴系統終止對一個套接字的使用。Close(socket)其中:socket是要關閉的套接字的描述符在Winsock中,用closesocket(socket)來關閉套接字。六、系統的原理框圖和程序流程圖開始Y輸入“s”TCPServer,CorrectbyPressarykeytocortirue,運行新的窗口輸入“c”YTCPClient,Correctedto輸入方式輸出“rothis“"message<m>commard”,丫在TCPServer窗口中顯示輸

25、入的信息結束圖1系統原理框圖程序流程圖:cout<<"tcpclientn":char*connectedAddr=inet_ntoa(*(inaddr*)&(addr.sinaddFWHILEWHILE七、實驗中的問題1、在建立Socket連接時,兩端的端口號必須設為一致,否則無法建立連接。2、建立好連接之后,必須按照給定的格式輸入通信信息,即m+輸入的信息內容,否則,將會出現“nothiscommand”的提示。3、如果一個使用某端口的程序沒有關閉,另一個程序就不能使用這個端口。4、必須先連接服務器端,再連接客戶端,否則,不能預期將服務器端和客戶端連通。八、實驗結果及分析程序運行后,會出現一個doc窗口,輸入“s”,并單擊回車,輸出“tc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論