




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、南 京 理 工 大 學(xué)紫金學(xué)院網(wǎng)絡(luò)編程技術(shù)報告作 者:學(xué) 號:學(xué)院(系):計算機科學(xué)與技術(shù) 專 業(yè):網(wǎng)絡(luò)工程 題 目:多功能聊天程序 2013 年 12 月目 錄一、背景····································
2、;3二、系統(tǒng)功能········································4三、系統(tǒng)設(shè)計流程圖·······
3、·····························5四、系統(tǒng)模塊劃分···················
4、83;·················7五、詳細(xì)設(shè)計及實現(xiàn)·······························
5、;···9六、總結(jié)體會········································19一. 背景 網(wǎng)絡(luò)聊天室通常直稱聊天室,是一種人們可以在線交談的網(wǎng)
6、絡(luò)論壇,在同一聊天室的人們通過廣播消息進行實時交談。聊天室可以建立在即時通訊軟件(如MSN Messenger、QQ)、P2P軟件、萬維網(wǎng)(如 Halapo,Meebo ) 等基礎(chǔ)上,萬維網(wǎng)方式更為普通和種類繁多,交談的手段不局限于文本,更包括語音、視頻。通常聊天室是按照房間或頻道為單位的,在同一房間或頻道的網(wǎng)人可以實時地廣播和閱讀公開消息。一般情況下,與其它網(wǎng)絡(luò)論壇、即時通訊不同的是,聊天室不保存聊天記錄。1.1課題背景及意義當(dāng)今世界正處于信息時代,計算機和通信網(wǎng)絡(luò)是這一時代所謂“信息基礎(chǔ)設(shè)施”。在互聯(lián)網(wǎng)相當(dāng)普及的今天,在互聯(lián)網(wǎng)上聊天對很多“網(wǎng)蟲”來說已經(jīng)是家常便飯了。聊天室程序可以說是網(wǎng)上
7、最簡單的多點通信程序。一個簡單的聊天室, 從程序員的觀點來看就是在多個I/O端點之間實現(xiàn)多對多的通信?;赟OCKET的局域網(wǎng)通信是一種靈活的、易于實現(xiàn)的、低成本的方法。它可以運行在各種使用TCP/IP協(xié)議作為通訊協(xié)議的網(wǎng)絡(luò)上。而在SOCKET API的幫助下,開發(fā)基于SOCKET的局域網(wǎng)通信軟件也是易于實現(xiàn)的。1.2 實驗平臺介紹Visual C+(簡稱VC)是Microsoft公司推出的目前使用極為廣泛的基于Windows平臺的C+可視化開發(fā)環(huán)境。VC基于C,C+語言,主要由是MFC組成,是與系統(tǒng)聯(lián)系非常緊密的編程工具,它兼有高級,和低級語言的雙重性,功能強大,靈活,執(zhí)行效率高,幾乎可說V
8、C在 Windows平臺無所不能。VC主要是針對Windows系統(tǒng),適合一些系統(tǒng)級 的開發(fā),可以方便實現(xiàn)一些底層 的調(diào)用。在VC里邊嵌入?yún)R編語言很簡單。當(dāng)對系統(tǒng)性能要求很高的時候,可用VC開發(fā)。VC在多線程、網(wǎng)絡(luò)通信、分布應(yīng)用方面,有著不可比擬的優(yōu)勢。1.3 可行性分析本課程設(shè)計主要解決在客戶端于客戶端的信息交換和客戶端于服務(wù)器的信息交換及服務(wù)器的信息處理上的管理的課程設(shè)計。此程序主要分為兩部分:服務(wù)器端和客戶端。服務(wù)器端用于提供一個網(wǎng)絡(luò)端口,等待客戶端發(fā)出請求,登錄到此服務(wù)端,然后進行網(wǎng)絡(luò)通訊和消息的轉(zhuǎn)發(fā);客戶端可通過服務(wù)器端的IP地址發(fā)送連接請求,然后登陸聊天室。在服務(wù)
9、器端的成員列表欄中會顯示在線的所有人名單,有人退出聊天室,成員列表會自動除名。服務(wù)器端同時也提供了成員之間的私聊功能,此時服務(wù)器端作為一個轉(zhuǎn)發(fā)站,進行消息的轉(zhuǎn)發(fā)。整個程序的主體使用了CSocket類的方法,實現(xiàn)了網(wǎng)絡(luò)通訊聊天。 先啟動服務(wù)器端聊天程序,這是聊天服務(wù)器需要指定一個端口號,客戶端則根據(jù)這個端口號以及服務(wù)器的網(wǎng)絡(luò)地址與服務(wù)器進行通信。在這里,把端口號成為“聊天頻道” 。在后面的程序代碼分析中將看到,端口號并不等同于聊天頻道,而是在聊天頻道上增加一個固定的偏移值,使得這個聊天頻道不會和系統(tǒng)保留的端口發(fā)生沖突。 服務(wù)器啟動后將在這個指定的端口號中等待客戶的連接。對于公共聊天室,服務(wù)器對客
10、戶的數(shù)目不做任何限制。而對于私人聊天室,每個聊天頻道則只能允許兩個客戶互相連接,使得一方發(fā)送的信息只能到達對方的主機中。這里的服務(wù)器提供的是公共聊天服務(wù)。 通過分析發(fā)現(xiàn),該程序完全可以通過Visual C+中MFC完成。二需求分析2.1 設(shè)計目的綜合運用本課程及計算機網(wǎng)絡(luò)的相關(guān)知識設(shè)計并實現(xiàn)一個網(wǎng)絡(luò)應(yīng)用程序,以作為開發(fā)平臺,通過實踐復(fù)習(xí)鞏固課堂所學(xué)的理論知識,提高對所學(xué)知識的綜合應(yīng)用能力。2.2 設(shè)計要求 采用客戶/服務(wù)器模式,分為客戶端程序和服務(wù)器端程序。服務(wù)器采用WINSOCK I/O模型中的任一種,支持多個客戶同時在線聊天??蛻舳顺绦蚝头?wù)器程序通過網(wǎng)絡(luò)交換聊天字符串內(nèi)容,服務(wù)器窗口的列
11、表框中顯示當(dāng)前在線用戶,支持客戶端之間的私聊(可以通過服務(wù)器中轉(zhuǎn),或考慮UDP打洞直接建立端端連接)。課程設(shè)計要求設(shè)計并編程完成兩個方面的內(nèi)容:首先建立一個使用TCP協(xié)議的聊天室服務(wù)器,這個服務(wù)器可以同時支持多個用戶的在線聊天;其次設(shè)計一個可以和服務(wù)器通信的聊天室客戶端。2.3 功能要求² 支持多個客戶端的連接,在服務(wù)器和多個客戶端之間進行數(shù)據(jù)傳輸;² 接收客戶端發(fā)送的消息,并顯示在一個列表框中;² 在用戶連接上后有提示,顯示出連接的用戶名字;² 發(fā)送信息時可以顯示聊天的所有記錄;2.4 系統(tǒng)主要功能和主要功能描述:服務(wù)器端聊天程序必須能夠做3件事情:(
12、1) 服務(wù)器聊天程序要在待定的端口上等待來自聊天客戶的連接請求,并且需要維護一個客戶連接表,以記錄所有成功的連接。(2) 服務(wù)器聊天程序要及時接受從各個聊天客戶發(fā)送過來的信息,然后把這些信息轉(zhuǎn)發(fā)到一個或多個客戶連接。對于公共聊天室,服務(wù)器將把接受到的信息向除源端外的所有客戶發(fā)送過去。(3) 服務(wù)器還要監(jiān)控這些連接的狀態(tài),在客戶主動離開或發(fā)生故障時從列表中刪除相應(yīng)的表項,并及時更新連接表。這些要求可以通過CSocket類提供的功能實現(xiàn)。從CSocket派生出兩個類CListenSocket和CClientSocket,它們分別用來偵聽客戶的連接請求和建立與客戶的連接。服務(wù)器只需要一個偵聽套接字C
13、ListenSocket,然后根據(jù)客戶的連接請求動態(tài)創(chuàng)建客戶套接字CClientSocket??蛻籼捉幼值臄?shù)量是不可預(yù)知的,因此需要一個列表來記錄。MFC的CPtrList類就能實現(xiàn)這種功能??蛻舳肆奶斐绦蛐枰瓿梢韵聨讉€功能:(1) 客戶端聊天程序要負(fù)責(zé)建立和維護與服務(wù)器的連接,通過獲取用戶的設(shè)置嘗試與服務(wù)器的連接,并且隨時檢測連接的狀態(tài)。(2) 客戶端聊天程序要把用戶輸入的信息及時發(fā)送到聊天服務(wù)器。一般情況下,當(dāng)用戶輸入一行信息并且按下回車鍵后聊天程序就要把這一行信息發(fā)送出去,才能及時地滿足用戶的交互需求。(3) 要隨時準(zhǔn)備好接受來自服務(wù)器的信息,隨時把接受到的信息顯示出來,讓用戶及時看到
14、對方的響應(yīng)。(4) 在用戶退出聊天過程是要關(guān)閉與服務(wù)器的連接。比較好的做法是提前通知服務(wù)器或者直接給服務(wù)器發(fā)送一條退出通知,使得服務(wù)器能夠及時掌握客戶端的連接狀態(tài),把對方客戶的退出信息及時發(fā)送到對等實體上??蛻舳肆奶斐绦蛐枰褂靡粋€通過CSocket類派生出來的CChatSocket類來實現(xiàn)。該套接字用來發(fā)送一個與服務(wù)器的連接請求和維持與服務(wù)器的連接,發(fā)送和接收聊天信息,完成上述各項功能。三設(shè)計流程圖根據(jù)對用戶的要求及功能設(shè)置可以得到以下的流程圖,用戶首先啟動客戶端,登陸服務(wù)器并向服務(wù)器發(fā)送信息,啟動服務(wù)器,服務(wù)器等待客戶要求并向客戶反饋在線用戶信息,用戶向服務(wù)器發(fā)送信息,服務(wù)器處理用戶的數(shù)據(jù)
15、,然后用戶開始聊天??蛻舳说牧奶旆譃閷λ腥说男畔⒑退搅牡男畔?,該信息應(yīng)通過程序控制分別進行處理。啟動登陸等待客戶端登陸客戶端用戶創(chuàng)建子套接字MessageCListenSocketCClientSocketMessage登陸成功連接上發(fā)送message顯示找到客戶端并顯示登陸失敗發(fā)送ID和IP三 系統(tǒng)模塊劃分圖1.系統(tǒng)模塊劃分圖服務(wù)器端:服務(wù)器等待用戶從主窗口發(fā)來的啟動和接收消息的過程如下:首先,建立自己的套接口。在互聯(lián)網(wǎng)的進程通信中,全局標(biāo)識一個進程需要一個被稱為“半相關(guān)”的三元組(協(xié)議,本地主機地址和本地端口號)來描述;而一個完整的進程通信實例,則需要一個被稱為“相關(guān)”的五元組(協(xié)議,本
16、地主機地址,本地端口號,遠端主機地址和遠端端口號)來描述。s_sockfd=socket(AF_INET,SOCK_STREAM,0),該函數(shù)建立指定格式,數(shù)據(jù)類型和協(xié)議下的套接口。地址格式為AF_INET(唯一支持的格式);數(shù)據(jù)類型SOCK_STREAM表示建立流式套接口;第三個參數(shù)為0,即協(xié)議缺省。Bind(s_sockfd,(struct sockaddr*)&server,sizeof(server),該函數(shù)建立服務(wù)器本地的半相關(guān)。其中,server是sockaddr_in結(jié)構(gòu),其成員描述了本地端口號和本地主機地址,經(jīng)過bind()將服務(wù)器進程在網(wǎng)上標(biāo)識出來。然后建立連接,先是
17、調(diào)用listen()函數(shù)表示開始偵聽,再通過accept()調(diào)用等待接收連接。Listen(s_sockfd,2)表示連接請求隊列長度為2,即允許有兩個請求。若有多于兩個請求,則出現(xiàn)錯誤,給出錯誤代碼。ns=accept(s_sockfd,(struct sockaddr*)& chent,& namelen), accept() 阻塞缺省等待請求隊列中的請求,一旦有連接請求來到,該函數(shù)就建立一個和s有相同屬性的新的套接口。Client也是一個sockaddr_in結(jié)構(gòu),連接建立時填入請求連接的套接口的半相關(guān)信息。然后,就可以接收和發(fā)送數(shù)據(jù)了。recv(ns,buf,1024,
18、0), send(ns,buf,pktlen,0)上面兩個函數(shù)分別負(fù)責(zé)接收和發(fā)送數(shù)據(jù)。recv從建立連接的套接口ns接收數(shù)據(jù)放入buf中;send則將buf中數(shù)據(jù)發(fā)送給ns。至于第四個參數(shù),表示該函數(shù)調(diào)用方式,可選擇NSG_DONTROUTE和MSG_OOB,0表示缺省。最后,關(guān)閉套接口??蛻舳耍嚎蛻舳说却脩魪闹鞔翱诎l(fā)來的發(fā)送命令。一旦接收到發(fā)送數(shù)據(jù)請求,首先調(diào)用WSAStartup()函數(shù),初始化Windows Socket DLL,并檢查版本號:Status=WSAStartup(VersionReqd,lpmyWSAData);其中,VersionReqd描述了WinSock的版本;l
19、pmyWSAData指向一個WSADATA結(jié)構(gòu),該結(jié)構(gòu)描述了Windows Sockets的實現(xiàn)細(xì)節(jié)。WSAStartup()之后,進程通過主機名獲取主機地址:Hostaddr=gethostbyname(server_address);Hostaddr指向hostent結(jié)構(gòu),然后,進程就不斷地消息循環(huán),等待用戶通過菜單選擇啟動。這時,通過調(diào)用Clinent(t)來啟動套接口。在Clinent(t)中,首先也是調(diào)用socket()來建立套接口,為建立連接,必須立刻調(diào)用connect(),進程發(fā)出連接請求后就不管了。當(dāng)連接建立好后,WINSOCKDLL自動發(fā)出一條消息給窗口函數(shù),使程序運行下去。
20、Connect(s_sockfd,(struct sockaddrFAR*)&dst_addr,sizedlf(dst_addr);窗口函數(shù)在收到UM_SOCK消息后,判斷是由哪個網(wǎng)絡(luò)事件引起的。第一次,必然是由連接事件引起的,這樣,就會執(zhí)行相應(yīng)的程序,同樣調(diào)用WSAASyncselect()來提名DWRITE事件,希望在套接口可發(fā)送數(shù)據(jù)時接收消息。在收到FD_WRITE消息時,先調(diào)用send()發(fā)送數(shù)據(jù),在調(diào)用WSAASyncselect()來提名FD_READ事件,希望在套接口可接收數(shù)據(jù)時收到消息,在收到FD_READ消息時,先調(diào)用recv()來接收數(shù)據(jù),再提名FD_WRITE事件
21、,如此循環(huán)下去,直到發(fā)生外部事件FD_CLOSE。這時就調(diào)用WSAAsyncselect(s,hwnd,0,0)來停止異步選擇。在窗口函數(shù)接收到WM_DESTROY消息時,先調(diào)用closesocket()來關(guān)閉套接口,再調(diào)用WSACleanup()終止Windows sockets Dll,并釋放資源四 詳細(xì)設(shè)計及實現(xiàn)1. 客戶端1.1用戶登錄模塊設(shè)計BEGIN_MESSAGE_MAP(CMainBordApp, CWinApp)ON_COMMAND(ID_HELP, CWinApp:OnHelp)END_MESSAGE_MAP()CMainBordApp:CMainBordApp()CMainBordApp theApp;BOOL CMainBordApp:InitInstance()if (!AfxSocketInit()AfxMessageBox(IDP_SOCKETS_INIT_FAILED);return FALSE;AfxEnableControlContainer();#ifdef _AFXDLLEnable3dControls();#elseEnable3dContr
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年內(nèi)蒙古華蒙電力勘察設(shè)計有限公司招聘筆試真題
- 2024年貴州黔南科技學(xué)院輔導(dǎo)員考試真題
- 第4課+直面挫折+積極應(yīng)對教案【中職專用】中職思想政治《心理健康與職業(yè)生涯》(高教版2023基礎(chǔ)模塊)
- 專業(yè)技術(shù)人員繼續(xù)教育考試題目及答案
- 中考化學(xué)第一輪考點:加熱器皿-酒精燈 復(fù)習(xí)教案
- 材料力學(xué)模擬試卷B
- 記賬實操-先進制造業(yè)增值稅加計抵減的賬務(wù)處理分錄實例
- 災(zāi)害鏈模型構(gòu)建-洞察及研究
- 跨域空間協(xié)同治理-洞察及研究
- 躁動病人護理注意事項講課件
- 便秘科普宣傳課件
- 浙江潔普斯清潔設(shè)備有限公司年產(chǎn)11萬臺清洗機技改項目環(huán)評報告
- 高校資產(chǎn)管理十五五規(guī)劃方案
- 2024年威寧自治縣在職在編教師考調(diào)真題
- 小學(xué)生反洗錢課件
- 酒店前廳部管理制度
- 2022~2023學(xué)年廣東廣州天河區(qū)初一下學(xué)期期末語文試卷(標(biāo)準(zhǔn)版)
- 廣東省深圳市光明區(qū)2025年八年級下學(xué)期期末數(shù)學(xué)試題及答案
- 建設(shè)工程總包合同EPC課件
- 初中英語跨學(xué)科項目設(shè)計心得體會
- 《斯大林格勒戰(zhàn)役》課件
評論
0/150
提交評論