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

下載本文檔

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

文檔簡介

1、<p><b>  XXX大學(xué)</b></p><p>  《網(wǎng)絡(luò)系統(tǒng)》課程設(shè)計(jì)報(bào)告</p><p>  學(xué) 院 專 業(yè) </p><p>  班 級(jí) 學(xué) 號(hào) <

2、/p><p>  學(xué)生姓名 指導(dǎo)教師 </p><p>  課程成績 完成日期 年 月 日 </p><p><b>  課程設(shè)計(jì)成績?cè)u(píng)定</b></p><p>  學(xué) 院

3、 專 業(yè) </p><p>  班 級(jí) 學(xué) 號(hào) </p><p>  學(xué)生姓名 指導(dǎo)教師 </p><p>  完成日期 年 月 日

4、 </p><p>  指導(dǎo)教師對(duì)學(xué)生在課程設(shè)計(jì)中的評(píng)價(jià)</p><p>  指導(dǎo)教師對(duì)課程設(shè)計(jì)的評(píng)定意見</p><p><b>  課程設(shè)計(jì)任務(wù)書</b></p><p>  學(xué)院 專業(yè) </p><p&g

5、t;<b>  局域網(wǎng)信息廣播</b></p><p>  學(xué)生姓名: 指導(dǎo)老師: </p><p>  摘 要 本課程設(shè)計(jì)主要基于VC6.0編程環(huán)境,實(shí)現(xiàn)一個(gè)局域網(wǎng)環(huán)境下的文件的廣播以及接收系統(tǒng): 一行一行讀取文件然后廣播,同一子網(wǎng)掩碼下的用戶都可以接收并查看。</p><p>  關(guān)鍵詞 課程設(shè)計(jì);UDP協(xié)議;套節(jié)字

6、;VC6.0編程環(huán)境; C/S工作模式。</p><p><b>  目錄</b></p><p><b>  1 引 言1</b></p><p>  1.1 課程設(shè)計(jì)目的1</p><p>  1.2 課程設(shè)計(jì)要求1</p><p>  1.3 編程環(huán)境………………

7、………………………………………………………………………2</p><p><b>  2需求分析2</b></p><p>  2.1 開發(fā)背景2</p><p>  2.2 功能要求2</p><p>  3 相關(guān)協(xié)議及原理3</p><p>  3.1 UDP協(xié)議3</p>

8、;<p>  3.2客戶機(jī)/服務(wù)器模式3</p><p>  3.3 基本套接字4</p><p><b>  4 系統(tǒng)設(shè)計(jì)6</b></p><p>  4.1 設(shè)計(jì)思路6</p><p>  4.2 系統(tǒng)功能6</p><p>  4.3 系統(tǒng)架構(gòu)6</p&g

9、t;<p>  5 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)7</p><p>  5.1 服務(wù)器端…………………………………………………………………………………7</p><p>  5.2 客端戶…………………………………………………………………………………............................9</p><p>  5.3 窗口截圖…………………………

10、……………………………………………………..12</p><p>  6 總結(jié)………………………………………………………………………………...13</p><p>  參考文獻(xiàn)………………………………………………………………………………………….14</p><p><b>  1 引 言</b></p><p>  

11、網(wǎng)廣播系統(tǒng)是典型的企業(yè)信息管理系統(tǒng),其開發(fā)主要包括后臺(tái)數(shù)據(jù)庫的建立和維護(hù)以及前端應(yīng)用程序的開發(fā)兩個(gè)方面。對(duì)于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的庫。而對(duì)于后者則要求應(yīng)用程序功能完備,易使用等特點(diǎn)。基于VC的局域網(wǎng)廣播系統(tǒng)介紹了如何使用組播(多點(diǎn)廣播)這種相當(dāng)新的技術(shù)以實(shí)現(xiàn)C/S模式的廣播,以及基于UDP(用戶數(shù)據(jù)報(bào)協(xié)議)的傳輸方式是怎樣進(jìn)行數(shù)據(jù)傳輸?shù)模乃俣?、安全性以及與基于TCP的通信有何不同。</p>

12、<p>  1.1 課程設(shè)計(jì)目的</p><p>  (1) 用我們所學(xué)過的知識(shí),以達(dá)到鞏固所學(xué)知識(shí),提高我們思考問題、分析問題和解決問題能力的目的。</p><p>  (2) 學(xué)會(huì)基于VC6.0 的程序開發(fā)的環(huán)境搭建與配置,并在實(shí)際運(yùn)用中學(xué)習(xí)和掌握VC程序開發(fā)的全過程。</p><p>  (3) 進(jìn)一步熟悉掌握VC++程序設(shè)計(jì)語言的基礎(chǔ)內(nèi)容,如用戶圖

13、形界面設(shè)計(jì)、VC多線程編程、基于Socket程序的設(shè)計(jì)、文件和網(wǎng)絡(luò)輸入輸出流編程等。</p><p>  (4) 通過親自動(dòng)手寫程序,一方面拓展知識(shí)面,一方面鍛煉調(diào)試能力。</p><p>  1.2 課程設(shè)計(jì)要求</p><p> ?。?)通過對(duì)基于局域網(wǎng)的消息廣播系統(tǒng)的設(shè)計(jì),熟悉UDP協(xié)議以及套節(jié)字編程原理。</p><p> ?。?)通

14、過課程設(shè)計(jì)培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,認(rèn)真的工作作風(fēng)和團(tuán)隊(duì)協(xié)作精神。</p><p>  (3)性能,熟悉VC及Socket/ServerSocket編程方法,理解C/S工作模式。</p><p>  (4)按要求編寫課程設(shè)計(jì)報(bào)告書,培養(yǎng)一定的自學(xué)能力和獨(dú)立分析問題、解決問題的能力。</p><p><b>  1.3 編程環(huán)境</b></p

15、><p>  Microsoft Visual C++是Microsoft公司推出的開發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作、可開發(fā)多種程序等優(yōu)點(diǎn),而且通過簡單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫接口、OLE2,WinSock網(wǎng)絡(luò)、3D控制界面。Visual C++ 6.0集成了MFC6.0,于1998發(fā)行。發(fā)行至今一直被廣泛

16、地用于大大小小的項(xiàng)目開發(fā)。但是,這個(gè)版本在WindowsXP下運(yùn)行會(huì)出現(xiàn)問題,尤其是在調(diào)試模式的情況下(例如:靜態(tài)變量的值并不會(huì)顯示)。 這個(gè)調(diào)試問題可以通過打一個(gè)叫“Visual C++ 6.0Processor Pack”的補(bǔ)丁來解決。奇怪的是,這個(gè)網(wǎng)頁強(qiáng)調(diào)用戶也必須運(yùn)行Windows 98、Windows NT4.0、或Windows 2000。</p><p><b>  2 需求分析</

17、b></p><p><b>  2.1 開發(fā)背景</b></p><p>  廣播系統(tǒng)具有實(shí)用性、經(jīng)濟(jì)性、便捷性等特點(diǎn),廣泛應(yīng)用于各種公共場(chǎng)合,如進(jìn)行全校的公共廣播、課間操、召開全校大會(huì)等。利用傳統(tǒng)廣播的概念,將其與網(wǎng)絡(luò)連接起來,即可實(shí)現(xiàn)網(wǎng)絡(luò)資源共享,典型的例子如:網(wǎng)絡(luò)教學(xué)。</p><p>  在網(wǎng)絡(luò)越來越發(fā)達(dá)的今天,人們對(duì)網(wǎng)絡(luò)的依賴

18、越來越多,越來越離不開網(wǎng)絡(luò), 基于VC6.0的局域網(wǎng)廣播系統(tǒng)能更方便的在局域網(wǎng)中傳遞信息,因此產(chǎn)生了制作一個(gè)局域網(wǎng)的廣播系統(tǒng);而且通過制作該程序還能更好的學(xué)習(xí)網(wǎng)絡(luò)軟件編程知識(shí)。</p><p><b>  2.2 功能要求</b></p><p>  實(shí)現(xiàn)一個(gè)局域網(wǎng)環(huán)境下的文件的廣播以及接收系統(tǒng): 一行一行讀取文件然后廣播,同一子網(wǎng)掩碼下的的用戶都可以接收并查看。&l

19、t;/p><p>  3 設(shè)計(jì)原理相關(guān)協(xié)議及原理</p><p><b>  3.1 UDP協(xié)議</b></p><p>  用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是 OSI 參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。是一個(gè)簡單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議,IETF RFC 768是UDP的正式規(guī)范。 UDP 協(xié)議基本上是 IP 協(xié)議與

20、上層協(xié)議的接口。 UDP 協(xié)議適用端口分別運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序。 </p><p>  由于大多數(shù)網(wǎng)絡(luò)應(yīng)用程序都在同一臺(tái)機(jī)器上運(yùn)行,計(jì)算機(jī)上必須能夠確保目的地機(jī)器上的軟件程序能從源地址機(jī)器處獲得數(shù)據(jù)包,以及源計(jì)算機(jī)能收到正確的回復(fù)。這是通過使用 UDP 的“端口號(hào)”完成的。例如,如果一個(gè)工作站希望在工作站 128.1.123.1 上使用域名服務(wù)系統(tǒng),它就會(huì)給數(shù)據(jù)包一個(gè)目的地址 128.1.123.1

21、,并在 UDP 頭插入目標(biāo)端口號(hào) 53 。源端口號(hào)標(biāo)識(shí)了請(qǐng)求域名服務(wù)的本地機(jī)的應(yīng)用程序,同時(shí)需要將所有由目的站生成的響應(yīng)包都指定到源主機(jī)的這個(gè)端口上。 UDP 端口的詳細(xì)介紹可以參照相關(guān)文章。 </p><p>  3.2 客戶機(jī)/服務(wù)器模式</p><p>  在TCP/IP網(wǎng)絡(luò)中兩個(gè)進(jìn)程間的相互作用的主機(jī)模式是客戶機(jī)/服務(wù)器模式(Client/Server model)。該模式的建立基

22、于以下兩點(diǎn):1、非對(duì)等作用;2、通信完全是異步的。客戶機(jī)/服務(wù)器模式在操作過程中采取的是主動(dòng)請(qǐng)示方式: </p><p>  首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)示提供相應(yīng)服務(wù):(過程如下)</p><p>  1、打開一通信通道并告知本地主機(jī),它愿意在某一個(gè)公認(rèn)地址上接收客戶請(qǐng)求。</p><p>  2、等待客戶請(qǐng)求到達(dá)該端口。</p><p>

23、;  3、接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。</p><p>  4、返回第二步,等待另一客戶請(qǐng)求。</p><p><b>  5、關(guān)閉服務(wù)器。</b></p><p><b>  客戶方:</b></p><p>  1、打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。</p

24、><p>  2、向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求……</p><p>  3、請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。</p><p><b>  3.3 基本套接字</b></p><p>  為了更好說明套接字編程原理,給出幾個(gè)基本的套接字: </p><p>  1、創(chuàng)建套接字——

25、socket()</p><p>  功能:使用前創(chuàng)建一個(gè)新的套接字</p><p>  格式:SOCKET PASCAL FAR socket(int af,int type,int procotol);</p><p>  參數(shù):af: 通信發(fā)生的區(qū)域</p><p>  type: 要建立的套接字類型</p><p&

26、gt;  procotol: 使用的特定協(xié)議</p><p>  2、指定本地地址——bind()</p><p>  功能:將套接字地址與所創(chuàng)建的套接字號(hào)聯(lián)系起來。</p><p>  格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);</p>

27、<p>  參數(shù):s: 是由socket()調(diào)用返回的并且未作連接的套接字描述符(套接字號(hào))。</p><p>  其它:沒有錯(cuò)誤,bind()返回0,否則SOCKET_ERROR</p><p><b>  地址結(jié)構(gòu)說明:</b></p><p>  struct sockaddr_in</p><p>  

28、{short sin_family;//AF_INET</p><p>  u_short sin_port;//16位端口號(hào),網(wǎng)絡(luò)字節(jié)順序</p><p>  struct in_addr sin_addr;//32位IP地址,網(wǎng)絡(luò)字節(jié)順序</p><p>  char sin_zero[8];//保留</p><p><b>

29、  }</b></p><p>  3、建立套接字連接——connect()和accept()</p><p>  功能:共同完成連接工作</p><p>  格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);</p><p

30、>  SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen);</p><p><b>  參數(shù):同上</b></p><p>  4、監(jiān)聽連接——listen()</p><p>  功能:用于面向連接服務(wù)器,表明它愿意接收連接。&l

31、t;/p><p>  格式:int PASCAL FAR listen(SOCKET s, int backlog);</p><p>  5、數(shù)據(jù)傳輸——send()與recv()</p><p>  功能:數(shù)據(jù)的發(fā)送與接收</p><p>  格式:int PASCAL FAR send(SOCKET s,const char FAR * b

32、uf,int len,int flags);</p><p>  int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);</p><p>  參數(shù):buf:指向存有傳輸數(shù)據(jù)的緩沖區(qū)的指針。 </p><p>  6、多路復(fù)用——select()</p><p>

33、;  功能:用來檢測(cè)一個(gè)或多個(gè)套接字狀態(tài)。</p><p>  格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds, </p><p>  fd_set FAR * exceptfds,const struct timeval FAR * timeout);</p><

34、p>  參數(shù):readfds:指向要做讀檢測(cè)的指針</p><p>  writefds:指向要做寫檢測(cè)的指針</p><p>  exceptfds:指向要檢測(cè)是否出錯(cuò)的指針</p><p>  timeout:最大等待時(shí)間</p><p>  7、關(guān)閉套接字——closesocket()</p><p>&l

35、t;b>  功能:關(guān)閉套接字s</b></p><p>  格式:BOOL PASCAL FAR closesocket(SOCKET s);</p><p><b>  4 系統(tǒng)設(shè)計(jì)</b></p><p><b>  4.1 設(shè)計(jì)思路</b></p><p>  整個(gè)系統(tǒng)分為

36、廣播發(fā)送端和接收端,發(fā)送端發(fā)送數(shù)據(jù)信息到多播組。接受端可以選擇接收與不接收,服務(wù)器端是信息的中心。服務(wù)器端可以打開指定的文件,通過定時(shí)器不斷發(fā)送信息,同時(shí)可以自己顯示正在發(fā)送和已發(fā)送的信息。客戶端則可以選擇接收和停止接收,同時(shí)顯示接收到的內(nèi)容。</p><p>  本課程設(shè)計(jì)按照系統(tǒng)的具體功能要求,首先應(yīng)用Socket編程創(chuàng)建客戶端和服務(wù)器端,每個(gè)接收端就會(huì)相應(yīng)的創(chuàng)建一個(gè)線程,它們之間通過這個(gè)連接來實(shí)現(xiàn)數(shù)據(jù)通信;

37、然后在發(fā)送端和接收端設(shè)置一個(gè)監(jiān)聽器,用于監(jiān)聽發(fā)出的消息。并根據(jù)消息做出不同的動(dòng)作。</p><p><b>  4.2 系統(tǒng)功能</b></p><p>  該系統(tǒng)實(shí)現(xiàn)了局域網(wǎng)內(nèi)部的信息廣播,,同一子網(wǎng)掩碼下的用戶都可以接收并查看。發(fā)送端發(fā)送的信息。發(fā)送端可以開始發(fā)送和停止發(fā)送,接收端也可以接收和停止接收,兩端都可以顯示發(fā)送的信息。</p><p&

38、gt;<b>  4.3 系統(tǒng)構(gòu)架</b></p><p>  (1)選擇用戶數(shù)據(jù)報(bào)協(xié)議UDP,使用VC的socket編程機(jī)制,分別建立發(fā)送端與接收端,自己可以設(shè)定主機(jī)的地址。</p><p> ?。?)分別設(shè)計(jì)發(fā)送端與接收器端的界面,并使用MFC程序用戶界面的開發(fā)工具包Swing進(jìn)行窗體界面的布局,以及實(shí)現(xiàn)部分窗口事件的相應(yīng)。</p><p>

39、;<b>  4.4模塊設(shè)計(jì)</b></p><p>  (1) 廣播發(fā)送端:</p><p>  主要實(shí)現(xiàn)向各個(gè)接收端發(fā)布廣播消息。 </p><p>  1、選擇要發(fā)送的文件:可以選擇路徑。</p><p>  2、發(fā)送信息:運(yùn)用MulticastSocket多播數(shù)據(jù)報(bào)套接字類用于發(fā)送和接收 IP 多播包。設(shè)置Ti

40、mer計(jì)時(shí)器在指定時(shí)間間隔觸發(fā)一個(gè)或多個(gè) ActionEvent。</p><p>  3、顯示消息:顯示發(fā)送的內(nèi)容和已發(fā)送的內(nèi)容。主要用BufferedReader(Reader in) </p><p>  創(chuàng)建一個(gè)使用默認(rèn)大小輸入緩沖區(qū)的緩沖字符輸入流用來每次顯示一行正發(fā)送的內(nèi)容。顯示已發(fā)送的內(nèi)容則要使用append(String str) 將給定文本追加到文本區(qū)的當(dāng)前文本。<

41、/p><p><b>  (2) 客戶端:</b></p><p>  主要實(shí)現(xiàn)接收發(fā)送端發(fā)送的消息,和發(fā)送端一樣可以顯示已接收的信息內(nèi)容。和接受端得一個(gè)重要的區(qū)別在于它不需要打開一個(gè)文件,代碼要簡單一點(diǎn)。</p><p><b>  5 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)</b></p><p><b>  5

42、.1服務(wù)器端</b></p><p>  //Server.cpp</p><p>  #pragma comment(lib, "ws2_32.lib")</p><p>  #include <winsock2.h></p><p>  #include <ws2tcpip.h>&l

43、t;/p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #define MCASTADDR "233.0.0.1" //本例使用的多播組地址。</p><p>  #define MCASTPORT 5150 //綁定的

44、本地端口號(hào)。</p><p>  #define BUFSIZE 1024 //接收數(shù)據(jù)緩沖大小。</p><p>  int main( int argc,char ** argv)</p><p><b>  {</b></p><p>  WSADATA wsd;</p><p>  str

45、uct sockaddr_in remote;</p><p>  SOCKET sock,sockM;</p><p>  TCHAR sendbuf[BUFSIZE];</p><p>  int len = sizeof( struct sockaddr_in);</p><p>  if( WSAStartup( MAKEWORD(2

46、,2),&wsd) !=0)</p><p><b>  {</b></p><p>  printf("WSAStartup() failed\n");</p><p>  return -1;</p><p><b>  }</b></p><p&

47、gt;  if((sock=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,</p><p>  WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF|</p><p>  WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET)</p><p><b&g

48、t;  {</b></p><p>  printf("socket failed with:%d\n",WSAGetLastError());</p><p>  WSACleanup();</p><p>  return -1;</p><p><b>  }</b></p&g

49、t;<p>  remote.sin_family = AF_INET;</p><p>  remote.sin_port = htons(MCASTPORT);</p><p>  remote.sin_addr.s_addr = inet_addr( MCASTADDR );</p><p>  if(( sockM = WSAJoinLeaf(

50、sock,(SOCKADDR*)&remote,</p><p>  sizeof(remote),NULL,NULL,NULL,NULL,</p><p>  JL_BOTH)) == INVALID_SOCKET)</p><p><b>  {</b></p><p>  printf("WSAJ

51、oinLeaf() failed:%d\n",WSAGetLastError());</p><p>  closesocket(sock);</p><p>  WSACleanup();</p><p>  return -1;</p><p><b>  }</b></p><p>

52、;<b>  while(1)</b></p><p><b>  {</b></p><p>  printf("發(fā)送 :");</p><p>  scanf("%s",sendbuf);</p><p>  if(sendto(sockM,(char*)

53、sendbuf,strlen(sendbuf),0,(struct sockaddr*)&remote,sizeof(remote))==SOCKET_ERROR)</p><p><b>  {</b></p><p>  printf("sendto failed with: %d\n",WSAGetLastError());</

54、p><p>  closesocket(sockM);</p><p>  closesocket(sock); </p><p>  WSACleanup();</p><p>  return -1;</p><p><b>  }</b></p><p>  if(str

55、cmp(sendbuf,"QUIT")==0) break;</p><p>  Sleep(500);</p><p><b>  }</b></p><p>  closesocket(sockM);</p><p>  closesocket(sock);</p><p&

56、gt;  WSACleanup();</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  5.2客戶端</b></p><p>  // Client.cpp</p><p>  

57、#pragma comment(lib, "ws2_32.lib")</p><p>  #include <winsock2.h></p><p>  #include <ws2tcpip.h></p><p>  #include <stdio.h></p><p>  #inclu

58、de <stdlib.h></p><p>  #define MCASTADDR "233.0.0.1" //本例使用的多播組地址。</p><p>  #define MCASTPORT 5150 //綁定的本地端口號(hào)。</p><p>  #define BUFSIZE 1024 //接收數(shù)據(jù)緩沖大小。</p>&

59、lt;p>  int main( int argc,char ** argv){</p><p>  WSADATA wsd;</p><p>  struct sockaddr_in local,remote,from;</p><p>  SOCKET sock,sockM;</p><p>  TCHAR recvbuf[BUFS

60、IZE];</p><p>  int len = sizeof( struct sockaddr_in);</p><p><b>  int ret;</b></p><p>  //初始化WinSock2.2</p><p>  if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)

61、{</p><p>  printf("WSaStartup() failed\n");</p><p>  return -1;</p><p><b>  }</b></p><p>  if((sock=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,</p&g

62、t;<p>  WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF|</p><p>  WSA_FLAG_OVERLAPPED)) == INVALID_SOCKET){</p><p>  printf("socket failed with:%d\n",WSAGetLastError());&l

63、t;/p><p>  WSACleanup();</p><p>  return -1;</p><p><b>  }</b></p><p>  // 將sock綁定到本機(jī)某端口上</p><p>  local.sin_family = AF_INET;</p><p>

64、;  local.sin_port = htons(MCASTPORT);</p><p>  local.sin_addr.s_addr = INADDR_ANY;</p><p>  if( bind(sock,(struct sockaddr*)&local,sizeof(local)) == SOCKET_ERROR )</p><p><b&

65、gt;  {</b></p><p>  printf( "bind failed with:%d \n",WSAGetLastError());</p><p>  closesocket(sock);</p><p>  WSACleanup();</p><p>  return -1;</p>

66、;<p><b>  }</b></p><p><b>  //加入多播組</b></p><p>  remote.sin_family = AF_INET;</p><p>  remote.sin_port = htons(MCASTPORT);</p><p>  remot

67、e.sin_addr.s_addr = inet_addr( MCASTADDR );</p><p>  if(( sockM = WSAJoinLeaf(sock,(SOCKADDR*)&remote,sizeof(remote),NULL,NULL,NULL,NULL, JL_BOTH)) == INVALID_SOCKET)</p><p><b>  {<

68、/b></p><p>  printf("WSAJoinLeaf() failed:%d\n",WSAGetLastError());</p><p>  closesocket(sock);</p><p>  WSACleanup();</p><p>  return -1;</p><p

69、><b>  }</b></p><p>  //接收多播數(shù)據(jù),當(dāng)接收到的數(shù)據(jù)為"quit"時(shí)退出。</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(( ret = recvfro

70、m(sock,recvbuf,BUFSIZE,0,(struct sockaddr*)&from,&len)) == SOCKET_ERROR)</p><p><b>  {</b></p><p>  printf("recvfrom failed with:%d\n",WSAGetLastError());</p>

71、<p>  closesocket(sockM);</p><p>  closesocket(sock);</p><p>  WSACleanup();</p><p>  return -1;</p><p><b>  }</b></p><p>  if( strcmp(r

72、ecvbuf,"QUIT") == 0 ) break;</p><p><b>  else {</b></p><p>  recvbuf[ret] = '\0';</p><p>  printf("RECV:' %s ' FROM<%s> \n",rec

73、vbuf,inet_ntoa(from.sin_addr));</p><p><b>  }</b></p><p><b>  }</b></p><p>  closesocket(sockM);</p><p>  closesocket(sock);</p><p>

74、;  WSACleanup();</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  5.3窗口截圖</b></p><p>  局域網(wǎng)廣播客戶端初始界面,如圖:</p><p> 

75、 局域網(wǎng)廣播服務(wù)器端初始界面,如圖:</p><p>  發(fā)送/接收到的信息界面,如圖:</p><p><b>  6 總結(jié)</b></p><p>  經(jīng)過努力,我終于將課程設(shè)計(jì)做完了。在這次作業(yè)過程中,我遇到了許多困難,但在老師,同學(xué)的幫助和我的努力下,我順利的完成了設(shè)計(jì)。這個(gè)程序代碼并不多,也不復(fù)雜,但程序編寫中用到了VC中的組件,面板

76、容器,事件處理,線程的創(chuàng)建、同步,輸入輸出處理,內(nèi)部類,異常處理,和網(wǎng)絡(luò)通信的知識(shí),這次的課程設(shè)計(jì)讓我受益非淺。設(shè)計(jì)過程中對(duì)程序整體的認(rèn)知不夠準(zhǔn)確,只能想到一部分功能而不能滿足整體的要求。通過查詢參考書和向同學(xué)請(qǐng)教,最后終于搞明白了。在整個(gè)設(shè)計(jì)過程中,對(duì)我來說,收獲最大的是方法和能力,那些分析和解決問題的方法與能力。在整個(gè)過程中,我發(fā)現(xiàn)我的理論知識(shí)和實(shí)際應(yīng)用脫節(jié)??傮w來說,我覺得做這種設(shè)計(jì)對(duì)我的幫助還是很大的,它需要我們將學(xué)過的相關(guān)知識(shí)

77、都系統(tǒng)地聯(lián)系起來,對(duì)學(xué)過的理論進(jìn)行深入的理解,這就為我們以后進(jìn)行相關(guān)的工作打下了基礎(chǔ)。</p><p><b>  參 考 文 獻(xiàn)</b></p><p>  [1] 蔣東興.Windows Sockets 網(wǎng)絡(luò)程序設(shè)計(jì)大全,清華大學(xué)出版社</p><p>  [2] 錢能,等.C++程序設(shè)計(jì)教程[M].北京:清華大學(xué)出版社</p>

78、<p>  [3] http:/tech.163.com, Win socket 編程之套接字原理</p><p>  [4] http://www.vbaspnew.com, Winsock Terminal示例程序</p><p><b>  致謝</b></p><p>  通過兩周的課程設(shè)計(jì),讓我在鞏固過去所學(xué)知識(shí)的基礎(chǔ)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論