網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì).doc_第1頁(yè)
網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì).doc_第2頁(yè)
網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì).doc_第3頁(yè)
網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì).doc_第4頁(yè)
網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì).doc_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

HUNAN CITY UNIVERSITY 網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì)說(shuō)明書 設(shè)計(jì)題目: 基于多線程的網(wǎng)絡(luò)聊天控制臺(tái)軟件的設(shè)計(jì)與實(shí)現(xiàn) 專 業(yè): 網(wǎng) 絡(luò) 工 程 學(xué)生姓名: 朱江 班級(jí)學(xué)號(hào): 1206102-21 分組成員:1206102-06郭輝超1206102-18曾濤1206102-21朱江 指導(dǎo)教師: 黃雪華老師 汪彥老師 2015 年 07月 03日網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì)報(bào)告學(xué)號(hào):1206102-21 姓名:朱江一、設(shè)計(jì)時(shí)間2015年06月29日-07月03日。二、設(shè)計(jì)地點(diǎn)湖南城市學(xué)院信息樓507機(jī)房。三、設(shè)計(jì)目的1、鞏固網(wǎng)絡(luò)協(xié)議編程課程涉及的基本知識(shí),培養(yǎng)靈活運(yùn)用知識(shí)進(jìn)行獨(dú)立設(shè)計(jì)的能力;2、掌握TCP/IP網(wǎng)絡(luò)程序框架、Winsock API、高級(jí)網(wǎng)絡(luò)編程API的使用;3、提高綜合運(yùn)用所學(xué)的理論知識(shí)獨(dú)立分析和解決問(wèn)題的能力;4、進(jìn)一步熟悉利用Visual C+6.0進(jìn)行開(kāi)發(fā)的能力;5、培養(yǎng)查閱資料,獨(dú)立思考問(wèn)題的能力。四、設(shè)計(jì)小組成員1206102-06 郭輝超,1206102-18 曾濤,1206102-21 朱江。五、指導(dǎo)老師黃雪華老師、汪彥老師。六、設(shè)計(jì)課題經(jīng)過(guò)小組大部分組員的討論,決定選取選題(基于多線程的網(wǎng)絡(luò)聊天控制臺(tái)軟件的設(shè)計(jì)與實(shí)現(xiàn)),編寫一個(gè)基于局域網(wǎng)的多線程控制臺(tái)聊天系統(tǒng)。理由:1、此系統(tǒng)要求采用C/S模式實(shí)現(xiàn),有利于進(jìn)一步深刻理解和掌握這種基本的網(wǎng)絡(luò)編程模式。2、該系統(tǒng)功能相對(duì)簡(jiǎn)單,易于實(shí)現(xiàn),適于初學(xué)者。3、該系統(tǒng)牽涉到Winsock編程,需要靈活運(yùn)用這些知識(shí)解決實(shí)際問(wèn)題,有利于培養(yǎng)網(wǎng)絡(luò)系統(tǒng)開(kāi)發(fā)的實(shí)際動(dòng)手能力。七、基本思路及關(guān)鍵問(wèn)題的解決方法設(shè)計(jì)思路 對(duì)于聊天程序,一般都是采用 C/S 模式,即服務(wù)器/客戶端的模式來(lái)設(shè)計(jì)。這樣的模式有利于用戶的操作和更好的用戶體念。而客戶端的設(shè)計(jì)主要關(guān)注與用戶的體念和操作方便,其網(wǎng)絡(luò)設(shè)計(jì)比較簡(jiǎn)單;服務(wù)器則要完成大量的客戶控制、數(shù)據(jù)轉(zhuǎn)發(fā)等操作,設(shè)計(jì)起來(lái)相對(duì)更加復(fù)雜??傮w設(shè)計(jì) 聊天程序是一個(gè)典型的網(wǎng)絡(luò)程序,而網(wǎng)絡(luò)程序的設(shè)計(jì)大多 是基于 TCP/IP協(xié)議來(lái)實(shí)現(xiàn)的, TCP/IP協(xié)議是一個(gè)4層協(xié)議族,如圖1所示。 聊天程序主要是依賴于傳輸層來(lái)實(shí)現(xiàn),在傳輸層中有兩個(gè)重要的協(xié)議:TCP協(xié)議和UDP協(xié)議。其中TCP協(xié)議(傳輸控制協(xié)議)是一個(gè)面向連接的協(xié)議,本協(xié)議在進(jìn)行網(wǎng)絡(luò)傳輸過(guò)程中首先必須建立一個(gè)安全的連接(通常是采用3次握手來(lái)實(shí)現(xiàn)的),UDP(用戶數(shù)據(jù)報(bào)協(xié)議)是一種無(wú)連接的協(xié)議,本協(xié)議在進(jìn)行數(shù)據(jù)傳輸前不用建立點(diǎn)對(duì)點(diǎn)的連接,所傳輸?shù)臄?shù)據(jù)不會(huì)進(jìn)行安全檢查,如果有丟包的現(xiàn)象也不會(huì)重發(fā),本文所涉及的聊天程序采用TCP 協(xié)議來(lái)實(shí)現(xiàn)由于每個(gè)電腦可能會(huì)有多個(gè)服務(wù),而每個(gè)服務(wù)都采用同一個(gè)IP地址來(lái)進(jìn)行收發(fā)數(shù)據(jù),所以就必須采用一種機(jī)制來(lái)實(shí)現(xiàn)對(duì)每個(gè)服務(wù)的區(qū)分這就是端口,對(duì)于同一IP地址的不同端口號(hào)就代表了不同的服務(wù),所以對(duì)于網(wǎng)絡(luò)聊天程序的服務(wù)器端必須設(shè)定一個(gè)端口號(hào),而客戶端則必須連接到服務(wù)器端的IP和其指定的端口,如圖2所示。 在本文的聊天程序中,采用客戶端發(fā)送數(shù)據(jù)-服務(wù)器接收數(shù)據(jù)-服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù)-客戶端接收數(shù)據(jù)的流程來(lái)完成。由于該程序是一個(gè)服務(wù)器和多個(gè)客戶端進(jìn)行聊天的,所以在這里就必須注意以下幾個(gè)問(wèn)題: 服務(wù)器需要監(jiān)控端口,以便客戶的隨時(shí)連接;服務(wù)器需要監(jiān)控?cái)?shù)據(jù)流,以便隨時(shí)接受來(lái)自客戶端發(fā)來(lái)的數(shù)據(jù);為了實(shí)現(xiàn)客戶點(diǎn)對(duì)點(diǎn)的聊天, 則將為每個(gè)客戶建立一個(gè)線程。服務(wù)器設(shè)計(jì) 服務(wù)器設(shè)計(jì)主要難點(diǎn)是對(duì)多線程的設(shè)計(jì), 在這里主要涉及 到三方面的內(nèi)容:一是對(duì)客戶端接入的監(jiān)控,需要一個(gè)線程來(lái)完成;二是分別為每個(gè)客戶端創(chuàng)建一個(gè)線程,用于收發(fā)數(shù)據(jù),使客戶端之間不會(huì)彼此干擾;三是每個(gè)客戶端產(chǎn)生的線程對(duì)數(shù)據(jù)輸入流進(jìn)行監(jiān)控,隨時(shí)準(zhǔn)備接收數(shù)據(jù)。對(duì)于數(shù)據(jù)則應(yīng)該采用數(shù)據(jù)包的形式來(lái)進(jìn)行封裝,分別由發(fā)送者的地址,接收者的地址和數(shù)據(jù)構(gòu)成,其中地址由昵稱、IP和端口構(gòu)成。當(dāng)服務(wù)器接收到該數(shù)據(jù)后,將這些數(shù)據(jù)向每個(gè)客戶端都發(fā)送出去,由客戶端來(lái)決定是否接收該數(shù)據(jù)。所示:另外,當(dāng)客戶端連接到服務(wù)器時(shí),將向服務(wù)器發(fā)送一個(gè)數(shù)據(jù)包,服務(wù)器從數(shù)據(jù)包里面提取出客戶端的地址信息和昵稱,并且根據(jù)這些信息生成一張地址信息和昵稱的對(duì)照表,且將這張表群發(fā)給每個(gè)客戶;當(dāng)有客戶退出連接時(shí),服務(wù)器則從對(duì)照表中將該客戶的信息刪除,并且群發(fā)該表給所有客戶,該表的形式如下:地址昵稱 127.0.0.1 朱江 客戶端設(shè)計(jì)對(duì)于客戶端的設(shè)計(jì)則比服務(wù)器簡(jiǎn)單得多,主要是從界面等方便用戶操作的角度來(lái)考慮??蛻舳酥饕枰瓿蛇B接服務(wù)器、數(shù)據(jù)收發(fā)等功能。對(duì)于數(shù)據(jù)收發(fā)功能主要通過(guò)數(shù)據(jù)流來(lái)實(shí) 現(xiàn)。8、 算法及流程圖9、 調(diào)試過(guò)程中出現(xiàn)的問(wèn)題及相應(yīng)解決辦法1.一開(kāi)始在客戶端與服務(wù)器進(jìn)行通信時(shí),只有服務(wù)器能看見(jiàn)客戶端的消息,而客戶端看不見(jiàn)服務(wù)器發(fā)的消息,之后我們發(fā)現(xiàn)這是因?yàn)樵诳蛻舳私邮芟⒌拇a少了,在補(bǔ)全之后,雙方都能接收信息。2.之后我們想給這個(gè)段代碼多添加一些其他的功能,首先添加時(shí)間,在此過(guò)程中我們一開(kāi)始準(zhǔn)備使用CTime t=CTime.getCurrentTime();這個(gè)方法,可是除了一些我們沒(méi)能解決問(wèn)題,后來(lái)經(jīng)過(guò)詢問(wèn)老師和查詢資料,最終我們使用了源程序中的獲取時(shí)間的代碼。10、 課程設(shè)計(jì)心得體會(huì) 課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程,通過(guò)實(shí)驗(yàn)學(xué)習(xí)和領(lǐng)悟,充分的熟悉了VC+的運(yùn)用和操作,并順利完成實(shí)驗(yàn),增強(qiáng)自身團(tuán)隊(duì)協(xié)作意識(shí)。11、 源程序客戶端#include stdafx.h#include #include #pragma comment(lib,WS2_32.lib)#include #include SOCKET sockclient;sockaddr_in sockaddrclient;char sendbuf100;char tempbuf100;char recvbuf100;int len=sizeof(SOCKADDR_IN);DWORD WINAPI SendProc( LPVOID lpParameter / thread data);void main() /* *1.加載套接字,創(chuàng)建套接字(WSAStartup(),socket())* */ time_t tt = time(NULL);/這句返回的只是一個(gè)時(shí)間cuo tm* t= localtime(&tt); WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; if ( LOBYTE( wsaData.wVersion ) != 2 | HIBYTE( wsaData.wVersion ) != 2 ) WSACleanup( ); return; sockclient=socket(AF_INET,SOCK_DGRAM,0); /*2.向服務(wù)器發(fā)送數(shù)據(jù)(sendto)。*/ sockaddrclient.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); sockaddrclient.sin_family=AF_INET; sockaddrclient.sin_port=htons(6000); / HANDLE Hsend=CreateThread(NULL,0,SendProc,NULL,0,NULL); CloseHandle(Hsend); while(1) recvfrom(sockclient,recvbuf,100,0,(sockaddr*)&sockaddrclient,&len); if(*recvbuf) sprintf(tempbuf,%s:%s,inet_ntoa(sockaddrclient.sin_addr),recvbuf); printf(%d-%02d-%02d %02d:%02d:%02d, t-tm_year + 1900, t-tm_mon + 1,t-tm_mday,t-tm_hour,t-tm_min,t-tm_sec); printf( ); printf(%sn,tempbuf); /* /3.關(guān)閉套接字。inet_ntoa() */DWORD WINAPI SendProc( LPVOID lpParameter / thread data) while(1) gets(sendbuf); sendto(sockclient,sendbuf,100,0,(sockaddr*)&sockaddrclient,len); return 0;服務(wù)器#include stdafx.h#include #include #pragma comment(lib,WS2_32.lib)#include sockaddr_in sock;char recvbuf100;char sendbuf100;char tempbuf100;int len=sizeof(sockaddr);sockaddr_in SockAddr;SOCKET ServerSock;DWORD WINAPI SendProc( LPVOID lpParameter / thread data);void main() /* *1.加載套接字,創(chuàng)建套接字(WSAStartup(),socket())* */ time_t tt = time(NULL);/這句返回的只是一個(gè)時(shí)間cuo tm* t= localtime(&tt); WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; if ( LOBYTE( wsaData.wVersion ) != 2 | HIBYTE( wsaData.wVersion ) != 2 ) WSACleanup( ); return; ServerSock=socket(AF_INET,SOCK_DGRAM, IPPROTO_UDP); /* *2.將套接字綁定到一個(gè)本地地址和端口上(bind())。 */ SockAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); SockAddr.sin_family=AF_INET; SockAddr.sin_port=htons(6000);/ SockAddr.sin_zero= bind(ServerSock,(sockaddr*)&SockAddr,sizeof(sockaddr_in); /* *3.等待接收數(shù)據(jù)(recvfrom)。 */ HANDLE Hsend=CreateThread(NULL,0,SendProc,NULL,0,NULL); CloseHandle(Hsend); while(1) recvfrom(ServerSock,recvbuf,100,0,(sockaddr*)&sock,&len); if(*recvbuf) sprintf(tempbuf,%s:%s,inet_ntoa(sock.sin_addr),recvbuf); printf(%d-%02d-%02d %02d:%02d:%02d, t-tm_year + 1900, t-tm_mon + 1,t-tm_mday,t-tm_hour,t-tm_min,t-tm_sec); printf( ); printf(%sn,tempbuf); DWORD WINAPI SendProc( LPVOID lpParameter

溫馨提示

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