2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  軟件課程設(shè)計報告</b></p><p><b>  ——C語言</b></p><p>  班 級: </p><p>  姓 名: </p><p>  學(xué) 號:

2、 </p><p>  指導(dǎo)教師: </p><p>  日 期: 2012 年 9 月 6 日</p><p><b>  目 錄</b></p><p><b>  1設(shè)計內(nèi)容1</b></p><p>  2應(yīng)用程序總

3、體分析與設(shè)計1</p><p>  3應(yīng)用程序各功能模塊分析與設(shè)計1</p><p><b>  3.1功能模塊1</b></p><p>  3.1.1服務(wù)器1</p><p>  3.1.2 客戶端1</p><p>  3.2模塊流程圖2</p><p>

4、  3.2.1 服務(wù)器2</p><p>  3.2.2 客戶端3</p><p>  3.3程序結(jié)構(gòu)圖4</p><p><b>  4程序測試4</b></p><p><b>  4.1測試過程4</b></p><p>  4.1.1 服務(wù)器端VS 2012

5、截圖4</p><p>  4.1.2客戶端VS 2012截圖5</p><p><b>  4.2測試結(jié)果6</b></p><p>  4.2.1服務(wù)器端截圖6</p><p>  4.2.2客戶端截圖6</p><p><b>  5程序文檔7</b><

6、;/p><p><b>  5.1使用說明7</b></p><p><b>  5.2程序說明7</b></p><p>  5.2.1 模塊說明7</p><p>  5.2.2 頭文件說明7</p><p>  5.2.3 主要變量含義7</p>&

7、lt;p><b>  6 程序源代碼8</b></p><p>  6.1服務(wù)器端源代碼8</p><p>  6.2客戶端源代碼11</p><p><b>  1設(shè)計內(nèi)容</b></p><p>  通過C語言編程實現(xiàn)一個局域網(wǎng)聊天程序,包括服務(wù)器端程序和客戶端程序,程序能夠?qū)崿F(xiàn)兩臺

8、主機或多臺主機間的基本通訊。高級功能包括用戶注冊和信息校驗,能夠儲存聊天記錄,能夠?qū)崿F(xiàn)多人聊天。</p><p>  2應(yīng)用程序總體分析與設(shè)計</p><p>  C程序的編寫和調(diào)試在Visual Studio 2010集成開發(fā)環(huán)境中完成;</p><p>  通信協(xié)議選擇TCP,并利用WinSock API 函數(shù)完成網(wǎng)絡(luò)通信;</p><p&g

9、t;  進行題目分析,包括數(shù)據(jù)分析和功能分析,作為應(yīng)用程序設(shè)計的依據(jù);</p><p>  應(yīng)用程序系統(tǒng)設(shè)計,包括:</p><p>  總體設(shè)計,即根據(jù)功能分析,采用自頂向下的方法確定應(yīng)用系統(tǒng)的總體結(jié)構(gòu),進行模塊劃分并確定各模塊功能;</p><p>  模塊設(shè)計,即按照功能模塊,使用數(shù)據(jù)流程圖,N-S結(jié)構(gòu)圖等描述工具進行模塊程序設(shè)計;</p>&l

10、t;p>  編程及調(diào)試,對各模塊進行編程并上機調(diào)試,完成整個系統(tǒng)的開發(fā)。</p><p>  3應(yīng)用程序各功能模塊分析與設(shè)計</p><p><b>  3.1功能模塊</b></p><p><b>  3.1.1服務(wù)器</b></p><p>  初始化模塊:定義程序各變量以及對部分變量賦

11、初值。</p><p>  功能調(diào)用模塊:完成對Winsock的調(diào)用,創(chuàng)建流式套接字,綁定套接字與本地地址,監(jiān)聽連接,接受客戶端連接,關(guān)閉連接與套接口以及輸出錯誤信息。</p><p>  數(shù)據(jù)傳輸模塊:完成與客戶端之間的數(shù)據(jù)收發(fā)。</p><p><b>  3.1.2 客戶端</b></p><p>  初始化模塊:

12、定義程序各變量以及對部分變量賦初值。</p><p>  功能調(diào)用模塊:完成對Winsock的調(diào)用,創(chuàng)建流式套接字,連接至服務(wù)器端,關(guān)閉連接與套接口以及輸出錯誤信息。</p><p>  數(shù)據(jù)傳輸模塊:完成與客戶端之間的數(shù)據(jù)收發(fā)。</p><p><b>  3.2模塊流程圖</b></p><p><b> 

13、 3.2.1 服務(wù)器</b></p><p><b>  3.2.2 客戶端</b></p><p><b>  3.3程序結(jié)構(gòu)圖</b></p><p><b>  4程序測試</b></p><p><b>  4.1測試過程</b><

14、;/p><p>  4.1.1 服務(wù)器端VS 2012截圖</p><p>  4.1.2客戶端VS 2012截圖</p><p><b>  4.2測試結(jié)果</b></p><p>  4.2.1服務(wù)器端截圖</p><p>  4.2.2客戶端截圖</p><p><

15、b>  5程序文檔</b></p><p><b>  5.1使用說明</b></p><p>  程序功能:本程序是一個局域網(wǎng)聊天程序,能夠?qū)崿F(xiàn)兩臺主機或多臺主機間的基本通信。</p><p>  運行環(huán)境:Windows XP/7 及更高版本。</p><p>  安裝方法:直接運行程序。</

16、p><p>  說明:首先運行服務(wù)器端程序,然后運行客戶端程序,在客戶端輸入服務(wù)器的IP地址以建立連接。建立連接后,雙方可進行數(shù)據(jù)傳輸。輸入欲發(fā)送的信息,敲擊回車鍵進行發(fā)送,對方即可收到相應(yīng)信息。</p><p><b>  5.2程序說明</b></p><p>  5.2.1 模塊說明</p><p><b>

17、  服務(wù)器:</b></p><p>  初始化模塊:定義程序各變量以及對部分變量賦初值。</p><p>  功能調(diào)用模塊:完成對Winsock的調(diào)用,創(chuàng)建流式套接字,綁定套接字與本地地址,監(jiān)聽連接,接受客戶端連接,關(guān)閉連接與套接口以及輸出錯誤信息。</p><p>  數(shù)據(jù)傳輸模塊:完成與客戶端之間的數(shù)據(jù)收發(fā)。</p><p>

18、;<b>  客戶端:</b></p><p>  初始化模塊:定義程序各變量以及對部分變量賦初值。</p><p>  功能調(diào)用模塊:完成對Winsock的調(diào)用,創(chuàng)建流式套接字,連接至服務(wù)器端,關(guān)閉連接與套接口以及輸出錯誤信息。</p><p>  數(shù)據(jù)傳輸模塊:完成與客戶端之間的數(shù)據(jù)收發(fā)。</p><p>  5.2

19、.2 頭文件說明</p><p>  stdio.h: 帶緩沖的標(biāo)準(zhǔn)輸入輸出。調(diào)用此頭文件以使用標(biāo)準(zhǔn)輸入輸出函數(shù)。</p><p>  WinSock2.h: 調(diào)用此頭文件以使用WinSock API函數(shù)。</p><p>  5.2.3 主要變量含義</p><p>  int iSockErr: 錯誤信息;</p><

20、p>  SOCKET s: 創(chuàng)建的套接口號;</p><p>  SOCKET cs: 已連接套接口描述符;</p><p>  struct sockaddr_in tcpaddr: 賦予套接口的地址信息;</p><p>  struct sockaddr_in clientaddr: 發(fā)出連接請求的客戶機的地址信息;</p><p&g

21、t;  char recvbuf[MAXDATASIZE]: 接收數(shù)據(jù)的緩沖區(qū);</p><p>  char sendbuf[MAXDATASIZE]: 待發(fā)送數(shù)據(jù)的緩沖區(qū);</p><p>  char destip[16]: 存放用戶輸入的服務(wù)器端IP地址;</p><p>  int port: 端口號。</p><p><b&

22、gt;  6 程序源代碼</b></p><p>  6.1服務(wù)器端源代碼</p><p>  #include <WinSock2.h></p><p>  #pragma comment (lib,"ws2_32")</p><p>  #include <stdio.h></

23、p><p>  #define MAXDATASIZE 100</p><p>  void main()</p><p><b>  {</b></p><p><b>  //init</b></p><p>  int iSockErr;</p><p&

24、gt;  WORD wVersionRequested;</p><p>  WSADATA wsaData;</p><p><b>  SOCKET s;</b></p><p>  struct sockaddr_in tcpaddr;</p><p>  int port=5000;</p><

25、;p>  int backlog=5;</p><p>  SOCKET cs;</p><p>  struct sockaddr_in clientaddr;</p><p>  int addrlen=sizeof(clientaddr);</p><p>  char recvbuf[MAXDATASIZE];</p>

26、;<p>  char sendbuf[MAXDATASIZE];</p><p>  int count=0;</p><p><b>  //startup</b></p><p>  printf("--Server--\n");</p><p>  wVersionRequest

27、ed=MAKEWORD(2,2);</p><p>  if(WSAStartup(wVersionRequested,&wsaData)!=0)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf("WS

28、AStartup failed.\nError %d\n",iSockErr);</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("S

29、tartup success.\n");</p><p>  if(wsaData.wVersion!=wVersionRequested)</p><p><b>  {</b></p><p>  printf("Winsock version don't match.");</p>&l

30、t;p>  WSACleanup();</p><p><b>  return;</b></p><p><b>  }</b></p><p>  //create socket</p><p>  s=socket(AF_INET,SOCK_STREAM,0);</p>&

31、lt;p>  if(s==INVALID_SOCKET)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf("Create socket failed.\nError %d\n",iSockErr);</p>

32、<p>  WSACleanup();</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("Create socket succes

33、s.\n");</p><p><b>  //bind</b></p><p>  tcpaddr.sin_family=AF_INET;</p><p>  tcpaddr.sin_port=htons(port);</p><p>  tcpaddr.sin_addr.s_addr=htonl(INADD

34、R_ANY);</p><p>  if(bind(s,(LPSOCKADDR)&tcpaddr,sizeof(tcpaddr))==SOCKET_ERROR)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf(&

35、quot;Bind failed.\nError %d\n",iSockErr);</p><p>  WSACleanup();</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else</b>

36、</p><p>  printf("Bind success.\n");</p><p><b>  //listen</b></p><p>  if(listen(s,backlog)==SOCKET_ERROR)</p><p><b>  {</b></p>

37、<p>  iSockErr=WSAGetLastError();</p><p>  printf("Listen failed.\nError %d\n",iSockErr);</p><p>  WSACleanup();</p><p><b>  return;</b></p><

38、p><b>  }</b></p><p><b>  else</b></p><p>  printf("Listen success.\n");</p><p><b>  //accept</b></p><p>  clientaddr.si

39、n_port=htons(port);</p><p>  clientaddr.sin_family=AF_INET;</p><p>  clientaddr.sin_addr.s_addr=htonl(INADDR_ANY);</p><p><b>  while(1)</b></p><p><b>

40、  {</b></p><p>  printf("Waiting for client...\n");</p><p>  cs=accept(s,(LPSOCKADDR)&clientaddr,&addrlen);</p><p>  if(cs==INVALID_SOCKET)</p><p&

41、gt;<b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf("Accept failed.\nError %d\n",iSockErr);</p><p>  closesocket(cs);</p><p><b&

42、gt;  continue;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("Client connected.\n----------------------------------------------------

43、-\n\n");</p><p><b>  //receive</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(recv(cs,recvbuf,MAXDATASIZE,0)==SOCKE

44、T_ERROR)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  if(iSockErr==10038)</p><p><b>  {</b></p><p>  printf(&quo

45、t;Client disconnected.\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p>  printf("Receive failed.\nError %d\n",iSockErr);</p><p

46、>  closesocket(cs);</p><p><b>  break;</b></p><p><b>  }</b></p><p>  printf("Client: %s\n",recvbuf);</p><p>  if(recvbuf[0]=='

47、e'&&recvbuf[1]=='x'&&recvbuf[2]=='i'&&recvbuf[3]=='t'&&recvbuf[4]=='\0')</p><p><b>  {</b></p><p>  printf("C

48、lient disconnected.\n\n");</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  //send</b></p><p>  printf("You: ");&

49、lt;/p><p>  gets(sendbuf);</p><p>  if(send(cs,sendbuf,MAXDATASIZE,0)==SOCKET_ERROR)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>

50、;  printf("Send failed.\nError %d\n",iSockErr);</p><p>  closesocket(cs);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }

51、</b></p><p><b>  }</b></p><p>  //shutdown</p><p>  shutdown(cs,2);</p><p>  shutdown(s,2);</p><p>  closesocket(cs);</p><p>

52、;  closesocket(s);</p><p>  WSACleanup();</p><p><b>  }</b></p><p><b>  6.2客戶端源代碼</b></p><p>  #include <WinSock2.h></p><p> 

53、 #pragma comment (lib,"ws2_32")</p><p>  #include <stdio.h></p><p>  #define MAXDATASIZE 100</p><p>  void main()</p><p><b>  {</b></p>

54、;<p><b>  //init</b></p><p>  int iSockErr;</p><p>  WORD wVersionRequested;</p><p>  WSADATA wsaData;</p><p><b>  SOCKET s;</b></p>

55、;<p>  struct sockaddr_in destaddr;</p><p>  int port=5000;</p><p>  int count=0;</p><p>  char sendbuf[MAXDATASIZE];</p><p>  char recvbuf[MAXDATASIZE];</p&g

56、t;<p>  char destip[16];</p><p><b>  //startup</b></p><p>  printf("--Client--\n");</p><p>  wVersionRequested=MAKEWORD(2,2);</p><p>  if(W

57、SAStartup(wVersionRequested,&wsaData)!=0)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf("WSAStartup failed.\nError %d\n",iSockErr)

58、;</p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("Startup success.\n");</p><p&g

59、t;  if(wsaData.wVersion!=wVersionRequested)</p><p><b>  {</b></p><p>  printf("Winsock version don't match.");</p><p>  WSACleanup();</p><p>&

60、lt;b>  return;</b></p><p><b>  }</b></p><p>  //create socket</p><p>  s=socket(AF_INET,SOCK_STREAM,0);</p><p>  if(s==INVALID_SOCKET)</p>&

61、lt;p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf("Create socket failed.\nError %d\n",iSockErr);</p><p>  WSACleanup();</p><p&

62、gt;<b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  printf("Create socket success.\n");</p><p><b>  

63、//connect</b></p><p>  printf("Please enter IP: ");</p><p>  gets(destip);</p><p>  destaddr.sin_family=AF_INET;</p><p>  destaddr.sin_port=htons(port);

64、</p><p>  destaddr.sin_addr.s_addr=inet_addr(destip);</p><p>  if(connect(s,(LPSOCKADDR)&destaddr,sizeof(destaddr))==INVALID_SOCKET)</p><p><b>  {</b></p><

65、;p>  iSockErr=WSAGetLastError();</p><p>  printf("Connect failed.\nError %d\n",iSockErr);</p><p>  WSACleanup();</p><p>  system("pause");</p><p>

66、;<b>  return;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("Connect success.\n-----

67、------------------------------------------------\nTip: You can enter \"exit\" to exit.\n\n");</p><p><b>  }</b></p><p><b>  while(1)</b></p><p&g

68、t;<b>  {</b></p><p><b>  //send</b></p><p>  printf("You: ");</p><p>  gets(sendbuf);</p><p>  if(send(s,sendbuf,MAXDATASIZE,0)==SOCKE

69、T_ERROR)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf("Send failed.\nError %d\n",iSockErr);</p><p>  closesocket(s);<

70、/p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if(sendbuf[0]=='e'&&sendbuf[1]=='x'&&sendbuf[2]=='i'&&sendb

71、uf[3]=='t'&&sendbuf[4]=='\0')</p><p><b>  {</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  /

72、/receive</b></p><p>  if(recv(s,recvbuf,MAXDATASIZE,0)==SOCKET_ERROR)</p><p><b>  {</b></p><p>  iSockErr=WSAGetLastError();</p><p>  printf("Rec

73、eive failed.\nError %d\n",iSockErr);</p><p>  closesocket(s);</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  printf("Server: %s\

74、n",recvbuf);</p><p><b>  }</b></p><p>  system("pause");</p><p>  //shutdown</p><p>  shutdown(s,2);</p><p>  closesocket(s);<

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論