版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 計算機網(wǎng)絡(luò)課程設(shè)計</b></p><p> —— 基于C/S結(jié)構(gòu)的套接字程序設(shè)計(TCP)</p><p> 學(xué)院:信息技術(shù)工程學(xué)院</p><p><b> 班級: </b></p><p><b> 姓名: </b></p>
2、;<p><b> 學(xué)號: </b></p><p><b> 指導(dǎo)老師: </b></p><p><b> 目錄</b></p><p> 1、引言-------------------------------------------1</p><p
3、> 課題目的及要求---------------------------------2</p><p> 研究設(shè)想----------------------------------------2</p><p> 相關(guān)理論----------------------------------------2</p><p> 預(yù)期結(jié)果----------
4、------------------------------2</p><p> 2、關(guān)鍵詞-----------------------------------------2</p><p> 3、正文--------------------------------------------3</p><p> 理論基礎(chǔ)--------------------
5、--------------------3</p><p> 設(shè)計方法及思路----------------------------------3</p><p> 編程方法-----------------------------------------4</p><p> 主要內(nèi)容及其分析--------------------------------6&
6、lt;/p><p> 實驗結(jié)果及對其討論------------------------------9</p><p> 4、結(jié)論-------------------------------------------10</p><p> 核心--------------------------------------------10</p><
7、;p> 難點--------------------------------------------10</p><p> 問題--------------------------------------------10</p><p> 不足及對其改進(jìn)---------------------------------10</p><p> 5、致謝-
8、-------------------------------------------11</p><p> 6、參考文獻(xiàn)--------------------------------------11</p><p><b> 引言</b></p><p> 基于C/S結(jié)構(gòu)的套接字程序設(shè)計(TCP)</p><p&g
9、t;<b> 1、目的及要求</b></p><p><b> ?。?)目的和意義</b></p><p> 通過編程了解C/S結(jié)構(gòu)的網(wǎng)絡(luò)通信模型;</p><p> 掌握基于C/S結(jié)構(gòu)的Windows Socket TCP的程序設(shè)計方法。</p><p><b> ?。?)基本要求
10、</b></p><p> 按照C/S模型編寫兩個程序。一個為客戶端程序,另一是服務(wù)器端程序;</p><p> 對于C/S兩端都應(yīng)輸出必要的日志、出錯或診斷信息。</p><p><b> ?。?)小組人數(shù):2</b></p><p><b> 2、研究設(shè)想</b></p&
11、gt;<p> 能夠?qū)崿F(xiàn)當(dāng)客戶端向服務(wù)器端發(fā)送請求時,服務(wù)器端能夠向客戶端傳送數(shù)據(jù)。</p><p><b> 3、相關(guān)理論</b></p><p> TCP是一種面向鏈接的,可靠的傳輸協(xié)議。TCP協(xié)議在網(wǎng)絡(luò)層IP協(xié)議的基礎(chǔ)上,向應(yīng)用層用戶進(jìn)程提供可靠地全雙工的數(shù)據(jù)流傳輸。并且通過創(chuàng)建的流式套接字實現(xiàn)服務(wù)器端與客戶端的數(shù)據(jù)傳送。</p>
12、<p><b> 4、預(yù)期結(jié)果</b></p><p> 實現(xiàn)服務(wù)器端與客戶端的數(shù)據(jù)傳送。</p><p><b> 關(guān)鍵詞</b></p><p> 流式套接字;TCP/IP;服務(wù)器/客戶端; </p><p><b> 正文</b></p>
13、;<p><b> 1、理論基礎(chǔ)</b></p><p> 應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時,TCP會遇到同時為多個應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。多個TCP連接或多個應(yīng)用程序進(jìn)程可能需要通過同一個TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計算機操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口,區(qū)分不同應(yīng)用程序進(jìn)程間的網(wǎng)絡(luò)通信
14、和連接。網(wǎng)絡(luò)化的應(yīng)用程序在開始任何通訊之前都必需要創(chuàng)建套接字。</p><p> Socket可以看成在兩個程序進(jìn)行通訊連接中的一個端點,一個程序?qū)⒁欢涡畔懭隨ocket中,該Socket將這段信息發(fā)送給另外一個Socket中,使這段信息能傳送到其他程序中。</p><p> 套接字,是支持TCP/IP的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機之間的進(jìn)程進(jìn)行雙向通信的端點,簡單的說
15、就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程。</p><p> 流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復(fù)發(fā)送,并按順序接收。流套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務(wù),原因在于其使用了傳輸控制協(xié)議,即TCP(The Transmission Control Protocol)協(xié)議。</p><p><b> 2、設(shè)計方法
16、及思路</b></p><p> 客戶機與服務(wù)器建立連接,連接是通過申請的套接字實現(xiàn)的客戶打開一個套接字并把它約束在一個端口上如果成功就相當(dāng)于建立一個虛擬文件以后就可以在虛擬文件上寫數(shù)據(jù)并通過網(wǎng)絡(luò)向外傳送,完成連接后就可以通信了。客戶機向服務(wù)器發(fā)送請求,打開一個連接后,客戶機把請求消息送到服務(wù)器的停留端口上,完成提出請操作。服務(wù)器在處理完客戶的請求之后,要向客戶機發(fā)送響應(yīng)消息??蛻艉头?wù)器雙方都可以
17、通過關(guān)閉套接字來結(jié)束TCP/IP對話。</p><p> 當(dāng)使用TCP/IP協(xié)議一發(fā)客戶服務(wù)器服務(wù)程序時,服務(wù)器需要等待任意數(shù)量客戶端的連接,以便以他們提供服務(wù)。客戶端連接服務(wù)器時,必須先知道服務(wù)器的名稱。在TCP/IP中,就是服務(wù)器的IP地址和端口號。bind()函數(shù)實現(xiàn)將服務(wù)器綁定到一個已知的名字上的功能。接下來要將服務(wù)器套接字設(shè)置為監(jiān)聽狀態(tài),這是通過listen()函數(shù)完成的。在監(jiān)聽狀態(tài)下,如果客戶端向服
18、務(wù)器發(fā)起連接請求,服務(wù)器通過調(diào)用accept()函數(shù)來接受該接連請求。服務(wù)器與客戶端完成連接后,就可以進(jìn)行數(shù)據(jù)通信了。</p><p> 對客戶端來說,首先調(diào)用connect()函數(shù)向服務(wù)器發(fā)出連接請求。如果服務(wù)器接受了該請求,接下來就可以與服務(wù)器通信了。</p><p> 開發(fā)套接字應(yīng)用程序時,首先應(yīng)進(jìn)行Windows Sockets的初始化,加載Windows Sockets的實現(xiàn)
19、,然后創(chuàng)建套接字,對TCP套接字來說,需要在socket()函數(shù)或都WSASocket()函數(shù)中指明SOCK_STREAM套接字類型。當(dāng)服務(wù)器和客戶端通信結(jié)束時,關(guān)閉套接字,釋放Windows Sockets的實現(xiàn)。</p><p><b> 流程如下:</b></p><p> 服務(wù)器:創(chuàng)建套接字—>綁定—>監(jiān)聽—>接受連接—>收發(fā)數(shù)據(jù)—
20、>關(guān)閉</p><p> 客戶端:創(chuàng)建套接字—>連接—>收發(fā)數(shù)據(jù)—>關(guān)閉</p><p><b> 3、編程方法</b></p><p> TCP/TP流式套接字的編程步驟 (客戶端程序 ) </p><p><b> 1)加載套接字庫 &
21、lt;/b></p><p> 2)創(chuàng)建套接字(socket)。 </p><p> 3)向服務(wù)器發(fā)出連接請求(connect)。</p><p> 4)和服務(wù)器端進(jìn)行通信(send/recv)。</p><p><b> 5)關(guān)閉套接字。</b></p><p&g
22、t; socket-->connect-->send/recv</p><p> 我的客戶端所要用到的主要函數(shù)是</p><p><b> recv()函數(shù)</b></p><p> recv()函數(shù)和WSARevc()函數(shù)用于接受數(shù)據(jù)。recv()函數(shù)聲明如下:</p><p><b>
23、 int recv(</b></p><p><b> SOCKET s,</b></p><p> char FAR* buf,</p><p><b> int len,</b></p><p><b> int flags</b></p>
24、<p><b> );</b></p><p><b> send()函數(shù)</b></p><p> send()和WSASend()函數(shù)用于發(fā)送數(shù)據(jù)。send()函數(shù)聲明如下:</p><p><b> int send(</b></p><p><
25、b> SOCKET s,</b></p><p> const char FAR* buf,</p><p><b> int len,</b></p><p><b> int flags</b></p><p><b> );</b></p
26、><p> connect()函數(shù)</p><p> connect()函數(shù)實現(xiàn)連接服務(wù)器功能。該函數(shù)聲明如下:</p><p> int connect(</p><p><b> SOCKET s,</b></p><p> const struct sockaddr FAR* name
27、,</p><p> int namelen</p><p><b> );</b></p><p> closesocket()函數(shù)</p><p> closesocket()函數(shù)關(guān)閉套接字,釋放后占資源。該函數(shù)聲明如下:</p><p> int closesocket(</
28、p><p><b> SOCKET s</b></p><p><b> );</b></p><p> 4、主要內(nèi)容及對其分析</p><p><b> 客戶端源程序</b></p><p> #include <winsock2.h>
29、;</p><p> #include<stdio.h></p><p> #include <cstdlib></p><p> #include <iostream></p><p> #include <string.h></p><p> #pragma
30、 comment(lib,"ws2_32.lib")</p><p> int main()</p><p><b> {</b></p><p> WSADATA wsaData;</p><p> SOCKET ClientSocket;</p><p> SOC
31、KADDR_IN ServerAddr;</p><p> int ServerPort=4000;</p><p> char ServerIPAddr[50]="127.0.0.1";</p><p> char*SendData="I am a client.\n please send me a string of dat
32、a!";</p><p> char ReceiveBuffer[1024];</p><p> int SendLength=-1;</p><p> int Result=-1;</p><p> if((Result=WSAStartup(MAKEWORD(2,2),&wsaData))!=0)</p&g
33、t;<p><b> {</b></p><p> printf("WSAStartup failed with error%d\n",Result);</p><p><b> return 0;</b></p><p><b> }</b></p&g
34、t;<p> //1.socket建立客戶端流式套接字,返回套接字號</p><p> ClientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//創(chuàng)建客戶端套接字</p><p> if(ClientSocket<0)</p><p><b> {</b></
35、p><p> printf("socket failed with error%d\n",WSAGetLastError());</p><p><b> return 0;</b></p><p><b> }</b></p><p> memset(&Server
36、Addr,0,sizeof(ServerAddr));</p><p> ServerAddr.sin_family=AF_INET; //地址簇</p><p> ServerAddr.sin_port=htons(ServerPort);//同服務(wù)器端端口地址</p><p> ServerAddr.sin_addr.s_addr=inet_addr(S
37、erverIPAddr);//服務(wù)器端IP地址</p><p> //2.將套接字與服務(wù)器建立連接</p><p> Result=connect(ClientSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));//將套接字與服務(wù)器建立連接</p><p> if(Result<0)</p&g
38、t;<p><b> {</b></p><p> printf("connect failed with error%d\n",WSAGetLastError());</p><p><b> return 0;</b></p><p><b> }</b>
39、</p><p> //3.發(fā)送請求給服務(wù)器</p><p> SendLength=send(ClientSocket,SendData,strlen(SendData),0);//在套接字上發(fā)送信息</p><p> if(SendLength<0)</p><p><b> {</b></p&g
40、t;<p> printf("send failed with error%d\n",WSAGetLastError());</p><p><b> return 0;</b></p><p><b> }</b></p><p> else printf("發(fā)送的
41、信息:%s\n",SendData);</p><p> int ReceiveLen;</p><p> //4.接收服務(wù)器發(fā)來的數(shù)據(jù)</p><p><b> do{</b></p><p> memset(ReceiveBuffer,0,sizeof(ReceiveBuffer));</p&
42、gt;<p> ReceiveLen=recv(ClientSocket,ReceiveBuffer,sizeof(ReceiveBuffer),0);</p><p> if(ReceiveLen<0)//在套接字上接受信息</p><p><b> {</b></p><p> printf("Rece
43、ive failed with error %d\n",WSAGetLastError());</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> else</b></p><p><b&g
44、t; {</b></p><p> printf("接收的信息:%s\n",ReceiveBuffer);</p><p><b> }</b></p><p> }while(ReceiveLen!=0);</p><p> if(closesocket(ClientSocke
45、t)==SOCKET_ERROR)//關(guān)閉客戶端套接字</p><p><b> {</b></p><p> printf("closesocket failed with error%d\n",WSAGetLastError());</p><p><b> }</b></p>
46、<p> if(WSACleanup()==SOCKET_ERROR)//注銷,并釋放資源</p><p><b> {</b></p><p> printf("WSACleanup failed with error%d\n",WSAGetLastError());</p><p><b>
47、}</b></p><p> system("PAUSE");</p><p> return EXIT_SUCCESS;</p><p><b> }</b></p><p> 當(dāng)客戶端已經(jīng)與服務(wù)器建立連接后,那么我的客戶端程序就可以向服務(wù)器端發(fā)送數(shù)據(jù)請求,等待服務(wù)器響應(yīng),之后將
48、接受客戶端發(fā)送過來的數(shù)據(jù),當(dāng)完成數(shù)據(jù)接受后,可以關(guān)閉連接。</p><p> 5、實驗結(jié)果及對其討論</p><p> 服務(wù)器端發(fā)送數(shù)據(jù),客戶端能夠成功地接受數(shù)據(jù)</p><p><b> 結(jié)論</b></p><p> 我們組這次做的課題的核心就是通過套接字在客戶端和服務(wù)器之間建立連接,在建立連接之后實現(xiàn)客戶端
49、與服務(wù)器之間的通信,難點是在設(shè)計程序方面,既因為涉及相關(guān)函數(shù)的調(diào)用,又因為我開始對套接字的應(yīng)用不熟悉。</p><p> 這里面涉及些問題什么是套接字,什么是流式套接字,為什么用流式套接字。套接字,是支持TCP/IP的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機之間的進(jìn)程進(jìn)行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程,它的存在是為了區(qū)別不同應(yīng)用程序進(jìn)程間的網(wǎng)絡(luò)通信和連接。
50、流套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù),又因為該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復(fù)發(fā)送,并按順序接收,所以用了流式套接字。</p><p> 我們做的課題不足之處是不能實現(xiàn)雙向傳送數(shù)據(jù),還需要設(shè)計客戶端向服務(wù)器端的數(shù)據(jù)傳送,那么就需要在客戶端程序中設(shè)計監(jiān)聽,接受服務(wù)器端的請求信息,以及向服務(wù)端發(fā)送數(shù)據(jù)這幾部分。</p><p><b> 致謝</b><
51、;/p><p> 真誠感謝**老師您在我們課程設(shè)計階段給予我們的指導(dǎo)和幫助,您的指導(dǎo)使我對網(wǎng)絡(luò)專業(yè)知識方面有了更深的認(rèn)識,并且您嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),深深地感染和激勵著我。在此謹(jǐn)向您致以誠摯的謝意和崇高的敬意。</p><p> 感謝和我一起努力的同學(xué),我們在相互討論中不斷地改正程序并且各自提出自己的觀點然后討論,形成新的思路和想法,使得我們的課題能夠成功完成
52、,希望我們以后還能一起合作。在此致以真誠的謝意。</p><p><b> 參考文獻(xiàn)</b></p><p> 《計算機網(wǎng)絡(luò)課程設(shè)計》吳功宜、胡曉英、張仁、何云、王寧編著 機械工業(yè)出版社;</p><p> 網(wǎng)絡(luò)上的關(guān)于套接字編程的課件</p><p> 《計算機時代》2004年07期 基于TCP/IP協(xié)議的Wi
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- tcp_ip課程設(shè)計---基于套接字的客戶機服務(wù)器程序設(shè)計
- tcp傳輸程序課程設(shè)計
- 課程設(shè)計--unix程序設(shè)計課程設(shè)計
- vb課程設(shè)計之順序結(jié)構(gòu)程序設(shè)計
- 程序設(shè)計課程設(shè)計報告
- 程序設(shè)計課程設(shè)計報告
- matlab程序設(shè)計 課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計---基于tcp的點到點聊天程序設(shè)計
- java課程設(shè)計---java程序設(shè)計
- matlab程序設(shè)計 課程設(shè)計 (2)
- 程序設(shè)計課程設(shè)計--鏈表操作
- 《java程序設(shè)計》課程設(shè)計報告
- 【課程設(shè)計】面向?qū)ο蟪绦蛟O(shè)計
- 掃雷課程設(shè)計--掃雷程序設(shè)計
- 課程設(shè)計--linux c 程序設(shè)計
- 面向?qū)ο蟪绦蛟O(shè)計課程設(shè)計
- 課程設(shè)計--約瑟夫環(huán)程序設(shè)計
- 程序設(shè)計基礎(chǔ)課程設(shè)計
- c語言程序設(shè)計課程設(shè)計
- web程序設(shè)計課程設(shè)計報告
評論
0/150
提交評論