課程設計--基于cs結構的套接字程序設計(tcp)_第1頁
已閱讀1頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  計算機網絡課程設計</b></p><p>  —— 基于C/S結構的套接字程序設計(TCP)</p><p>  學院:信息技術工程學院</p><p><b>  班級: </b></p><p><b>  姓名: </b></p>

2、;<p><b>  學號: </b></p><p><b>  指導老師: </b></p><p><b>  目錄</b></p><p>  1、引言-------------------------------------------1</p><p

3、>  課題目的及要求---------------------------------2</p><p>  研究設想----------------------------------------2</p><p>  相關理論----------------------------------------2</p><p>  預期結果----------

4、------------------------------2</p><p>  2、關鍵詞-----------------------------------------2</p><p>  3、正文--------------------------------------------3</p><p>  理論基礎--------------------

5、--------------------3</p><p>  設計方法及思路----------------------------------3</p><p>  編程方法-----------------------------------------4</p><p>  主要內容及其分析--------------------------------6&

6、lt;/p><p>  實驗結果及對其討論------------------------------9</p><p>  4、結論-------------------------------------------10</p><p>  核心--------------------------------------------10</p><

7、;p>  難點--------------------------------------------10</p><p>  問題--------------------------------------------10</p><p>  不足及對其改進---------------------------------10</p><p>  5、致謝-

8、-------------------------------------------11</p><p>  6、參考文獻--------------------------------------11</p><p><b>  引言</b></p><p>  基于C/S結構的套接字程序設計(TCP)</p><p&g

9、t;<b>  1、目的及要求</b></p><p><b> ?。?)目的和意義</b></p><p>  通過編程了解C/S結構的網絡通信模型;</p><p>  掌握基于C/S結構的Windows Socket TCP的程序設計方法。</p><p><b> ?。?)基本要求

10、</b></p><p>  按照C/S模型編寫兩個程序。一個為客戶端程序,另一是服務器端程序;</p><p>  對于C/S兩端都應輸出必要的日志、出錯或診斷信息。</p><p><b> ?。?)小組人數:2</b></p><p><b>  2、研究設想</b></p&

11、gt;<p>  能夠實現當客戶端向服務器端發(fā)送請求時,服務器端能夠向客戶端傳送數據。</p><p><b>  3、相關理論</b></p><p>  TCP是一種面向鏈接的,可靠的傳輸協(xié)議。TCP協(xié)議在網絡層IP協(xié)議的基礎上,向應用層用戶進程提供可靠地全雙工的數據流傳輸。并且通過創(chuàng)建的流式套接字實現服務器端與客戶端的數據傳送。</p>

12、<p><b>  4、預期結果</b></p><p>  實現服務器端與客戶端的數據傳送。</p><p><b>  關鍵詞</b></p><p>  流式套接字;TCP/IP;服務器/客戶端; </p><p><b>  正文</b></p>

13、;<p><b>  1、理論基礎</b></p><p>  應用層通過傳輸層進行數據通信時,TCP會遇到同時為多個應用程序進程提供并發(fā)服務的問題。多個TCP連接或多個應用程序進程可能需要通過同一個TCP協(xié)議端口傳輸數據。為了區(qū)別不同的應用程序進程和連接,許多計算機操作系統(tǒng)為應用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口,區(qū)分不同應用程序進程間的網絡通信

14、和連接。網絡化的應用程序在開始任何通訊之前都必需要創(chuàng)建套接字。</p><p>  Socket可以看成在兩個程序進行通訊連接中的一個端點,一個程序將一段信息寫入Socket中,該Socket將這段信息發(fā)送給另外一個Socket中,使這段信息能傳送到其他程序中。</p><p>  套接字,是支持TCP/IP的網絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說

15、就是通信的兩方的一種約定,用套接字中的相關函數來完成通信過程。</p><p>  流套接字用于提供面向連接、可靠的數據傳輸服務。該服務將保證數據能夠實現無差錯、無重復發(fā)送,并按順序接收。流套接字之所以能夠實現可靠的數據服務,原因在于其使用了傳輸控制協(xié)議,即TCP(The Transmission Control Protocol)協(xié)議。</p><p><b>  2、設計方法

16、及思路</b></p><p>  客戶機與服務器建立連接,連接是通過申請的套接字實現的客戶打開一個套接字并把它約束在一個端口上如果成功就相當于建立一個虛擬文件以后就可以在虛擬文件上寫數據并通過網絡向外傳送,完成連接后就可以通信了??蛻魴C向服務器發(fā)送請求,打開一個連接后,客戶機把請求消息送到服務器的停留端口上,完成提出請操作。服務器在處理完客戶的請求之后,要向客戶機發(fā)送響應消息。客戶和服務器雙方都可以

17、通過關閉套接字來結束TCP/IP對話。</p><p>  當使用TCP/IP協(xié)議一發(fā)客戶服務器服務程序時,服務器需要等待任意數量客戶端的連接,以便以他們提供服務??蛻舳诉B接服務器時,必須先知道服務器的名稱。在TCP/IP中,就是服務器的IP地址和端口號。bind()函數實現將服務器綁定到一個已知的名字上的功能。接下來要將服務器套接字設置為監(jiān)聽狀態(tài),這是通過listen()函數完成的。在監(jiān)聽狀態(tài)下,如果客戶端向服

18、務器發(fā)起連接請求,服務器通過調用accept()函數來接受該接連請求。服務器與客戶端完成連接后,就可以進行數據通信了。</p><p>  對客戶端來說,首先調用connect()函數向服務器發(fā)出連接請求。如果服務器接受了該請求,接下來就可以與服務器通信了。</p><p>  開發(fā)套接字應用程序時,首先應進行Windows Sockets的初始化,加載Windows Sockets的實現

19、,然后創(chuàng)建套接字,對TCP套接字來說,需要在socket()函數或都WSASocket()函數中指明SOCK_STREAM套接字類型。當服務器和客戶端通信結束時,關閉套接字,釋放Windows Sockets的實現。</p><p><b>  流程如下:</b></p><p>  服務器:創(chuàng)建套接字—>綁定—>監(jiān)聽—>接受連接—>收發(fā)數據—

20、>關閉</p><p>  客戶端:創(chuàng)建套接字—>連接—>收發(fā)數據—>關閉</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)向服務器發(fā)出連接請求(connect)。</p><p>  4)和服務器端進行通信(send/recv)。</p><p><b>  5)關閉套接字。</b></p><p&g

22、t;  socket-->connect-->send/recv</p><p>  我的客戶端所要用到的主要函數是</p><p><b>  recv()函數</b></p><p>  recv()函數和WSARevc()函數用于接受數據。recv()函數聲明如下:</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()函數</b></p><p>  send()和WSASend()函數用于發(fā)送數據。send()函數聲明如下:</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()函數</p><p>  connect()函數實現連接服務器功能。該函數聲明如下:</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()函數</p><p>  closesocket()函數關閉套接字,釋放后占資源。該函數聲明如下:</p><p>  int closesocket(</

28、p><p><b>  SOCKET s</b></p><p><b>  );</b></p><p>  4、主要內容及對其分析</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);//同服務器端端口地址</p><p>  ServerAddr.sin_addr.s_addr=inet_addr(S

37、erverIPAddr);//服務器端IP地址</p><p>  //2.將套接字與服務器建立連接</p><p>  Result=connect(ClientSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));//將套接字與服務器建立連接</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ā)送請求給服務器</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.接收服務器發(fā)來的數據</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)//關閉客戶端套接字</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>  當客戶端已經與服務器建立連接后,那么我的客戶端程序就可以向服務器端發(fā)送數據請求,等待服務器響應,之后將

48、接受客戶端發(fā)送過來的數據,當完成數據接受后,可以關閉連接。</p><p>  5、實驗結果及對其討論</p><p>  服務器端發(fā)送數據,客戶端能夠成功地接受數據</p><p><b>  結論</b></p><p>  我們組這次做的課題的核心就是通過套接字在客戶端和服務器之間建立連接,在建立連接之后實現客戶端

49、與服務器之間的通信,難點是在設計程序方面,既因為涉及相關函數的調用,又因為我開始對套接字的應用不熟悉。</p><p>  這里面涉及些問題什么是套接字,什么是流式套接字,為什么用流式套接字。套接字,是支持TCP/IP的網絡通信的基本操作單元,可以看做是不同主機之間的進程進行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關函數來完成通信過程,它的存在是為了區(qū)別不同應用程序進程間的網絡通信和連接。

50、流套接字用于提供面向連接、可靠的數據傳輸服務,又因為該服務將保證數據能夠實現無差錯、無重復發(fā)送,并按順序接收,所以用了流式套接字。</p><p>  我們做的課題不足之處是不能實現雙向傳送數據,還需要設計客戶端向服務器端的數據傳送,那么就需要在客戶端程序中設計監(jiān)聽,接受服務器端的請求信息,以及向服務端發(fā)送數據這幾部分。</p><p><b>  致謝</b><

51、;/p><p>  真誠感謝**老師您在我們課程設計階段給予我們的指導和幫助,您的指導使我對網絡專業(yè)知識方面有了更深的認識,并且您嚴肅的科學態(tài)度,嚴謹的治學精神,精益求精的工作作風,深深地感染和激勵著我。在此謹向您致以誠摯的謝意和崇高的敬意。</p><p>  感謝和我一起努力的同學,我們在相互討論中不斷地改正程序并且各自提出自己的觀點然后討論,形成新的思路和想法,使得我們的課題能夠成功完成

52、,希望我們以后還能一起合作。在此致以真誠的謝意。</p><p><b>  參考文獻</b></p><p>  《計算機網絡課程設計》吳功宜、胡曉英、張仁、何云、王寧編著 機械工業(yè)出版社;</p><p>  網絡上的關于套接字編程的課件</p><p>  《計算機時代》2004年07期 基于TCP/IP協(xié)議的Wi

溫馨提示

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

評論

0/150

提交評論