版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件課程設(shè)計報告--局域網(wǎng)聊天程序
- 局域網(wǎng)聊天程序java課程設(shè)計
- java課程設(shè)計--局域網(wǎng)聊天程序的設(shè)計與實現(xiàn)
- java課程設(shè)計---局域網(wǎng)聊天程序的設(shè)計與實現(xiàn)
- java課程設(shè)計---局域網(wǎng)聊天程序的設(shè)計與實現(xiàn)
- vc++面向?qū)ο笳n程設(shè)計報告---局域網(wǎng)聊天程序
- 基于java局域網(wǎng)聊天軟件
- 局域網(wǎng)畢業(yè)論文---局域網(wǎng)聊天軟件
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計報告
- 課程設(shè)計--基于qt的局域網(wǎng)聊天室
- 局域網(wǎng)聊天軟件畢業(yè)論文
- 局域網(wǎng)聊天軟件-畢業(yè)論文
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設(shè)計報告
- java局域網(wǎng)聊天軟件大學(xué)設(shè)計好sqlserver
- java畢業(yè)論文---局域網(wǎng)聊天軟件
- 基于java局域網(wǎng)聊天程序設(shè)計與實現(xiàn)
- 基于java局域網(wǎng)聊天程序設(shè)計與實現(xiàn)
- 基于java局域網(wǎng)聊天軟件畢業(yè)論文
- 畢業(yè)設(shè)計--局域網(wǎng)聊天系統(tǒng)
- c++局域網(wǎng)聊天軟件設(shè)計與實現(xiàn)
評論
0/150
提交評論