網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告

網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告

ID:3671428

大小:513.09 KB

頁數(shù):40頁

時(shí)間:2017-11-22

網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告_第1頁
網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告_第2頁
網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告_第3頁
網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告_第4頁
網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告_第5頁
資源描述:

《網(wǎng)絡(luò)編程 基于tcp的簡易聊天室 實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、網(wǎng)絡(luò)編程課程設(shè)計(jì)-基于TCP的簡易聊天室一、實(shí)驗(yàn)基本信息概要1.題目要求熟悉異步網(wǎng)絡(luò)編程的基本方法,掌握異步網(wǎng)絡(luò)編程和網(wǎng)絡(luò)協(xié)議設(shè)計(jì)的方法。要求采用select模型、WSAAsyncSelect模型、WSAEventSelect模型、重疊模型或完成端口等模型完成編程任務(wù)。2.上機(jī)要求要求采用select模型、WSAAsyncSelect模型、WSAEventSelect模型、重疊模型或完成端口等模型完成下面的任務(wù)。3.題目內(nèi)容內(nèi)容概要:實(shí)現(xiàn)一個(gè)聊天室,支持多人聊天。也可以增加私聊等功能。4.開發(fā)環(huán)境操作系統(tǒng):Wind

2、ows7開發(fā)語言:C++集成開發(fā)環(huán)境:MicrosoftVisualStudio2010一、系統(tǒng)簡介1.界面本軟件使用DOS控制臺(tái)界面,界面風(fēng)格較為樸素,沒用使用復(fù)雜的顏色。但是對(duì)聊天時(shí)界面進(jìn)行了一定的控制和修正使得界面較為美觀,易讀。服務(wù)器:客戶端:2.軟件功能本軟件實(shí)現(xiàn)了聊天室基本的功能,包括公開聊天,私聊,獲取在線用戶,更改昵稱,獲得幫助等。1)公開聊天在光標(biāo)處直接輸入消息后按回車即為發(fā)送公開聊天,如下圖所示。2)私聊使用命令【/m對(duì)方UID消息】即可發(fā)送私聊,私聊只有對(duì)方可以看到,如下圖所示:客戶端1,密聊

3、UID為132的用戶。發(fā)送后客戶端2,UID為132的用戶收到私聊消息。1)獲取在線用戶列表使用命令【/list】即可獲得在線用戶列表,用戶列表會(huì)議系統(tǒng)消息的方式返回,如下圖所示。命令發(fā)送后2)更改昵稱使用命令【/name你的新昵稱】即可立即更改昵稱,成功修改后服務(wù)器會(huì)以系統(tǒng)消息的方式返回成功修改的提示。命令命令發(fā)送后1)幫助信息使用命令【/help】即可查看服務(wù)器的歡迎信息,里面包含了該聊天室的使用幫助,如下圖所示。命令命令發(fā)送后1.系統(tǒng)設(shè)計(jì)開發(fā)本軟件時(shí),我使用了面向?qū)ο蟮乃枷?,把服?wù)器和客戶端封裝成對(duì)應(yīng)的類,類

4、設(shè)計(jì)將會(huì)在下一節(jié)做詳細(xì)介紹。通行方面我在服務(wù)器接受客戶端消息,和客戶端接受服務(wù)器消息時(shí)使用了select模型,發(fā)送信息我使用的是普通的socket原語。基本原理為服務(wù)器與客戶端建立TCP連接,然后服務(wù)器負(fù)責(zé)路由消息到各個(gè)客戶端。2.優(yōu)點(diǎn)與缺點(diǎn)本軟件對(duì)流程復(fù)雜的SELECT模型進(jìn)行了細(xì)致的拆分與抽象,做到了邏輯流程清晰,每個(gè)函數(shù)簡潔易懂,層次分明。例如服務(wù)器啟動(dòng)函數(shù):它其實(shí)就完成了一個(gè)簡單的流程,初始化socket,綁定,監(jiān)聽,初始化fd_socket集合,死循環(huán)調(diào)用select。通過合理的封裝底層原語和加入異常處理

5、(異常交給頂層處理),使得代碼專注于業(yè)務(wù)流程而不是繁雜的異常判斷語句,在看下面這個(gè)函數(shù)DoSelect()。它也只完成一個(gè)簡單的流程,調(diào)用select,然后循環(huán)處理有讀事件的socket。接下來的DoFDRead()函數(shù)完成的事情也非常直接,如果有事件的socket是監(jiān)聽socket的話,那么就是接收到了一個(gè)新的連接,否則是接收到了新的小。從上面這個(gè)簡單的例子中可以看到,本軟件最大的優(yōu)點(diǎn)就是精心設(shè)計(jì)的類和函數(shù)。避免了使用select模型常見的反復(fù)嵌套的循環(huán)和判斷,每個(gè)函數(shù)清晰明了。本系統(tǒng)還存在以下不足,首先是沒有對(duì)

6、界面做更深入的優(yōu)化,只是做了最基本的調(diào)整,讓輸入輸出更加雅觀,其次是底層原語的封裝并沒有考慮到泛用性。三、系統(tǒng)詳細(xì)設(shè)計(jì)這部分的文檔在編碼之前已經(jīng)基本完成,由于時(shí)間較為倉促,部分內(nèi)容可能和實(shí)際有所出入。1.ChatServer類該類負(fù)責(zé)完成服務(wù)器所有操作。1)類圖2)成員變量Mapm_clients聊天者的SOCKET與昵稱的映射fd_setm_fdSocket可用套接字集合fd_setm_fdRead有事件發(fā)生的套接字集合SOCKETm_sListen監(jiān)聽SocketSOCKETm_s

7、NowClient當(dāng)前處理的客戶套接字intm_nPort監(jiān)聽端口3)方法設(shè)計(jì)voidBind()voidListen()voidSelect()intRecv()SOCKETAccept()封裝底層原語,并加入異常機(jī)制,使得外部調(diào)用簡約明了。構(gòu)造函數(shù)傳入監(jiān)聽端口,初始化m_nPortStart()1)初始化監(jiān)聽套接字:voidInitListenSocket()2)綁定套接字至本地機(jī)器:voidBind()3)進(jìn)入監(jiān)聽模式(設(shè)置為非阻塞):voidListen()4)初始化可用套接字集合voidInitFDSoc

8、ket()5)死循環(huán),調(diào)用select方法DoSelect()6)結(jié)束DoSelect()1)令m_fdRead=m_fdSocket2)調(diào)用Select()3)循環(huán)處理Select的結(jié)果DoFdRead(SocketsRead)4)結(jié)束DoFdRead(intiReadIndex)1)判斷是否為m_sListen2)是m_sListenRecvNewCon

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。