MFC小型局域網(wǎng)聊天室的實(shí)現(xiàn)畢業(yè)論文.doc_第1頁(yè)
MFC小型局域網(wǎng)聊天室的實(shí)現(xiàn)畢業(yè)論文.doc_第2頁(yè)
MFC小型局域網(wǎng)聊天室的實(shí)現(xiàn)畢業(yè)論文.doc_第3頁(yè)
MFC小型局域網(wǎng)聊天室的實(shí)現(xiàn)畢業(yè)論文.doc_第4頁(yè)
MFC小型局域網(wǎng)聊天室的實(shí)現(xiàn)畢業(yè)論文.doc_第5頁(yè)
已閱讀5頁(yè),還剩7頁(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)介

學(xué)習(xí)中心編號(hào):122008 學(xué)習(xí)中心名稱: 西南大學(xué)網(wǎng)絡(luò)與繼續(xù)教育學(xué)院畢 業(yè) 論 文(設(shè)計(jì))題目: MFC小型局域網(wǎng)聊天室的實(shí)現(xiàn)學(xué)生姓名 學(xué) 號(hào) 1 類(lèi) 型 網(wǎng) 絡(luò) 教 育 專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 層 次 專(zhuān)升本 指導(dǎo)教師 日 期 2014.10.9 MFC小型局域網(wǎng)聊天室的實(shí)現(xiàn)摘 要 隨著科技的發(fā)展,越來(lái)越多的小型公司需要組建一個(gè)網(wǎng)絡(luò),以支持公 司日常用的運(yùn)作,由于小型企業(yè)的網(wǎng)絡(luò)規(guī)模小,所以就需要有合適的組網(wǎng)方案,才能提供相對(duì)安全的網(wǎng)絡(luò)環(huán)境。本文探討一種基于 MFC 的抽象類(lèi) Socket 的局域網(wǎng)通信工具-聊天室的設(shè)計(jì)與實(shí)現(xiàn)方法。通過(guò)了解 Winsock 網(wǎng)絡(luò)編程的相關(guān)技術(shù),利用 TCP/IP 協(xié)議簇與應(yīng)用層通信的中間軟件抽象層 Socket 接口來(lái)實(shí)現(xiàn)局域網(wǎng)內(nèi)兩臺(tái)微機(jī)之間的連接。通過(guò)異步方式實(shí)現(xiàn)服務(wù)器/客戶端的通信模式,從而達(dá)到構(gòu)造小型的局域網(wǎng)聊天室的目的。關(guān)鍵詞:Socket,TCP/IP,局域網(wǎng),服務(wù)器/客戶端,異步方式目 錄 一、緒論4二、總體設(shè)計(jì)4(一)聊天室的設(shè)計(jì)目標(biāo)4(二) 聊天室的實(shí)現(xiàn)思想4(三) 聊天室的工作流程4三、 關(guān)鍵技術(shù)5(一)Windows Sockets5(二)多線程編程技術(shù)5四、功能分析5(一)服務(wù)器端功能6(二)客戶端功能6五、詳細(xì)設(shè)計(jì)6(一)服務(wù)器端的實(shí)現(xiàn)6(二) 客戶端的實(shí)現(xiàn)9結(jié)論12參考文獻(xiàn)12一、 緒論近年來(lái),互聯(lián)網(wǎng)發(fā)展日新月異,網(wǎng)絡(luò)使空間的距離不再成為人們溝通的障礙,世界各個(gè)角落的人們可以通過(guò) Internet收發(fā)郵件、實(shí)時(shí)聊天、獲取最新的資訊,本文將討論一種基于Socket 的局域網(wǎng)通信工具的設(shè)計(jì)與實(shí)現(xiàn)方法?;?Socket 的局域網(wǎng)通信軟件可以為企業(yè)原有的局域網(wǎng)提供一種良好、安全、快速的通信機(jī)制。它的實(shí)現(xiàn)無(wú)需對(duì)企業(yè)原有的局域網(wǎng)硬件進(jìn)行任何改動(dòng),具有實(shí)現(xiàn)成本低廉的優(yōu)點(diǎn),它的使用能有效地降低局域網(wǎng)通信負(fù)荷,提高局域網(wǎng)的使用效率,可以很好地解決企業(yè)內(nèi)部局域網(wǎng)的各種通信需求。它很好地詮釋了 Socket通信的原理,并且在企業(yè)內(nèi)部通信、教學(xué)、討論等應(yīng)用中都具有一定的實(shí)用價(jià)值。它具有信息收發(fā)速度快,保密性好,占用網(wǎng)絡(luò)帶寬資源低,占用服務(wù)器吞吐能力低,易于編程實(shí)現(xiàn)等優(yōu)點(diǎn)?;?Socket的局域網(wǎng)通信軟件應(yīng)用范圍廣闊,不但可以處理傳統(tǒng)的通信需求,而且也能擴(kuò)展以適應(yīng)新型的網(wǎng)絡(luò)應(yīng)用,如網(wǎng)絡(luò)教育,數(shù)據(jù)影音傳輸?shù)?,擁有廣泛的應(yīng)用前景。二、總體設(shè)計(jì)(一)聊天室的設(shè)計(jì)目標(biāo)本課題是建立聊天通信模型,設(shè)計(jì)一個(gè)聊天室軟件,包括服務(wù)器端和客戶端。服務(wù)器端功能:初始化 Socket,創(chuàng)建服務(wù)器端;)維護(hù)一個(gè)鏈表,保存所有用戶的 IP地址、端口信息;接受用戶傳送來(lái)的聊天信息,然后向鏈表中的所用用戶轉(zhuǎn)發(fā);接受用戶傳送來(lái)的連接判斷命令,并向用戶發(fā)出響應(yīng)命令??蛻舳斯δ埽嚎蛻舳私缑嫔系膬蓚€(gè)文本框,一個(gè)用于顯示接受的聊天信息,一個(gè)用來(lái)接受用戶輸入的聊天信息。當(dāng)按下“發(fā)送”按鈕時(shí)將信息發(fā)送給服務(wù)器。通過(guò)本課題的畢業(yè)設(shè)計(jì),可以比較深入的了解和掌握 Winsock 控件基本屬性、方法和事件,理解網(wǎng)絡(luò)聊天通信的概念,輸控制協(xié)議(TCP)進(jìn)行數(shù)據(jù)交流,初步掌握網(wǎng)絡(luò)聊天通信程序的設(shè)計(jì)方法。并能鞏固和擴(kuò)展大學(xué)期間的學(xué)習(xí)內(nèi)容,進(jìn)行項(xiàng)目的設(shè)計(jì)開(kāi)發(fā)訓(xùn)練,更好的適應(yīng)社會(huì)的需求。(二) 聊天室的實(shí)現(xiàn)思想聊天室程序一般都是以服務(wù)器提供服務(wù)端連接響應(yīng),使用者通過(guò)客戶端程序連接到服務(wù)器,就可以與在同一服務(wù)器上的用戶交談,這是一個(gè)面向連接的通信過(guò)程。因此,程序要在 TCP/IP環(huán)境下,實(shí)現(xiàn)服務(wù)器端和客戶端兩部分程序。(三) 聊天室的工作流程(1)服務(wù)器端工作流程。服務(wù)器端通過(guò) socke(t)系統(tǒng)調(diào)用創(chuàng)建一個(gè) Socket 數(shù)組后(即設(shè)定了接受連接客戶的最大數(shù)目),與指定的本地端口綁定 bind(),就可以在端口進(jìn)行監(jiān)聽(tīng)listen()。如果有客戶端連接請(qǐng)求,則在數(shù)組中選擇一個(gè)空Socket,將客戶端地址賦給這個(gè) Socket。然后登客戶端的用戶就可以在服務(wù)器上聊天了。(2)客戶端工作流程??蛻舳顺绦蛳鄬?duì)簡(jiǎn)單,只需要建立一個(gè) Socket與服務(wù)器端連接,成功后通過(guò)這個(gè) Socket來(lái)發(fā)送第 37 卷第 4 期和接收數(shù)據(jù)就可以了。三、 關(guān)鍵技術(shù)(一)Windows SocketsWindows Sockets 是一套開(kāi)放的、支持多種協(xié)議的 Windows 下的網(wǎng)絡(luò)編程接口. Socket 實(shí)際在計(jì)算機(jī)中提供了一個(gè)通信端口,可以通過(guò)這個(gè)端口與任何一個(gè)具有Socket 接口的計(jì)算機(jī)通信 . 應(yīng)用程序在網(wǎng)絡(luò)上傳輸,接收的信息都通過(guò)這個(gè) Socket 接口來(lái)實(shí)現(xiàn)(圖 1).(二)多線程編程技術(shù)進(jìn)程是應(yīng)用程序的執(zhí)行實(shí)例,每個(gè)進(jìn)程是由私有的虛擬地址空間、代碼、數(shù)據(jù)和其他各種系統(tǒng)資源組成,進(jìn)程在運(yùn)行過(guò)程中創(chuàng)建的資源隨著進(jìn)程的終止而被銷(xiāo)毀,所使用的系統(tǒng)資源在進(jìn)程終止時(shí)被釋放或關(guān)閉. 線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行單元系統(tǒng)創(chuàng)建好進(jìn)程后,實(shí)際上就啟動(dòng)執(zhí)行了該進(jìn)程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,將程序的啟動(dòng)點(diǎn)提供給 Windows 系統(tǒng). 主執(zhí)行線程終止了,進(jìn)程也就隨之終止. 一個(gè)進(jìn)程中的所有線程都在該進(jìn)程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術(shù)的應(yīng)用也較為廣泛。. 圖 1 面向相連接的套接字的系統(tǒng)調(diào)用圖四、功能分析本系統(tǒng)是建立局域網(wǎng)通信模型,設(shè)計(jì)一個(gè)聊天系統(tǒng),根據(jù)網(wǎng)絡(luò)應(yīng)用程序的特點(diǎn),局域網(wǎng)聊天系統(tǒng)有即時(shí)、高效的特點(diǎn) 服務(wù)器端和客戶端有不同的功能與需求。(一)服務(wù)器端功能1)能夠正確地、無(wú)沖突地啟動(dòng)服務(wù)器;2)監(jiān)聽(tīng)指定的端口,等待用戶的連接;3)接收到用戶連接請(qǐng)求時(shí),驗(yàn)證用戶身份;4)接收處理用戶注冊(cè)信息;5)建立與客戶端的連接,并能通知已在線用戶;6)向新登陸的用戶發(fā)送已上線的用戶信息;7)接收客戶端的消息請(qǐng)求,并能正確無(wú)誤地處理消息,并能發(fā)出消息到客戶端;8)當(dāng)用戶斷開(kāi)與服務(wù)器端的連接時(shí),服務(wù)器能夠正確的斷開(kāi)連接,并通知其他在線用戶;9)當(dāng)服務(wù)器關(guān)閉時(shí),應(yīng)通知所有在線用戶(二)客戶端功能1)能夠正確啟動(dòng)應(yīng)用程序,并能向服務(wù)器發(fā)出連接請(qǐng)求;2)能夠向服務(wù)器發(fā)送注冊(cè)請(qǐng)求;3)顯示在線用戶列表;4)能夠向指定聊天對(duì)象發(fā)送消息;5)能夠及時(shí)接收其他用戶發(fā)出的消息;6)能夠正確斷開(kāi)與服務(wù)器的連接;7)當(dāng)服務(wù)器關(guān)閉時(shí),所有用戶自動(dòng)下線五、詳細(xì)設(shè)計(jì)我們利用 WinSocket實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)聊天室。需要一個(gè)聊天服務(wù)器,它可以和很多客戶端進(jìn)行通信,從而把來(lái)自不同的客戶的聊天信息轉(zhuǎn)交到所有其他的客戶端。這樣就形成了一個(gè)采用 Client/Server結(jié)構(gòu)的并可以多人同時(shí)在線的聊天室。(一)服務(wù)器端的實(shí)現(xiàn)服務(wù)器端主要用于接收客戶端的連接,并轉(zhuǎn)發(fā)客戶端的信息。服務(wù)器端的具體實(shí)現(xiàn)過(guò)程如下:(1)利用“MFC AppWizard”創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,在對(duì)話框中添加 List Box、Edit Box等控件。服務(wù)器端對(duì)話框界面如 2 所示。圖 2 服務(wù)器端界面運(yùn)行圖(2)在對(duì)話框中類(lèi)的頭文件中引用 winsock2.h 頭文件,并導(dǎo)入 ws2_32.lib庫(kù)文件。#include“winsock2.h”#pragma comment(lib“,ws2_32.lib”)(3)在對(duì)話框類(lèi)中定義成員變量,記錄服務(wù)器套接字和與之連接的客戶端套接字信息。SOCKET m_server,m_client;SOCKET m_ClientsMAXNUM;/ 客戶端套接字int m_CurClient; / 當(dāng)前連接的客戶數(shù)量(4)在對(duì)話框的 OninitDailog 函數(shù)中創(chuàng)建套接字,并初始化數(shù)據(jù)。/ 創(chuàng)建套接字m_server = socke(tAF_INET,SOCK_STREAM,0);/ 將網(wǎng)絡(luò)中的事件關(guān)聯(lián)到窗口的消息函數(shù)中WSAAsyncSelect (m_server,m_hWnd,20000,F(xiàn)D_WRITE|FD_READ|FD_ACCEPT);m_client = 0;m_serverIP = ;for(int i = 0;i MAXNUM;i+)m_Clientsi= 0;m_CurClient = 0;(5)處理“監(jiān)聽(tīng)”按鈕的單擊事件,將套接字綁定到本機(jī)地址,并開(kāi)始監(jiān)聽(tīng)套接字。void CSocketChatFWQDDlg:OnOK()/ 服務(wù)器端地址sockaddr_in serveraddr;serveraddr.sin_family = AF_INET;m_IP.GetWindowTex(tm_serverIP);/ 設(shè)置本機(jī)地址serveraddr.sin_addr.S_un.S_addr = inet_add(rm_serverIP);UpdateData(TRUE);/ 設(shè)置端口號(hào)serveraddr.sin_port = htons(m_port);/ 綁定地址if (bind (m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)MessageBox(“綁定地址失敗.”);return;/ 開(kāi)始監(jiān)聽(tīng)listen(m_server,50);(6)向?qū)υ捒蛑刑砑?HeadleData函數(shù),用于接收客戶端的連接,并獲得客戶端傳來(lái)的數(shù)據(jù),將其轉(zhuǎn)發(fā)給其他客戶端。void CSocketChatFWQDDlg:HandleData()sockaddr_in serveraddr;char buffer1024;int len =sizeo(fserveraddr);/ 接收客戶端的數(shù)據(jù)int curlink =- 1;int num =- 1;for(int p = 0;p MAXNUM;p+)num= recv(m_Clientsp,buffer,1024,0);if(num !=- 1)curlink = p;break;buffernum= 0;if(num=- 1) / 接受客戶端的連接if(m_CurClient MAXNUM)m_Clients m_CurClient = accept(m_server,(struct sockaddr*)&serveraddr,&len);m_CurClient+=1;return;/ 將接收的數(shù)據(jù)發(fā)送給客戶端for(int j = 0;jmessage=20000)HandleData();return TRUE;elsereturn CDialog:PreTranslateMessage(pMsg);(二) 客戶端的實(shí)現(xiàn)客戶端的主要功能是建立與服務(wù)器的連接,面向服務(wù)器發(fā)送數(shù)據(jù),并且能夠接收由服務(wù)器傳送而來(lái)的數(shù)據(jù)??蛻舳说木唧w實(shí)現(xiàn)過(guò)程如下:(1)利用“MFC AppWizard”創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序,在對(duì)話框中添加 List Box、Edit Box等控件??蛻舳藢?duì)話框界面如 3 所示。圖 3 客戶端界面運(yùn)行圖(2)在對(duì)話框中類(lèi)的頭文件中引用 winsock2.h 頭文件,并導(dǎo)入 ws2_32.lib庫(kù)文件。#include“winsock2.h”#pragma comment(lib“,ws2_32.lib”)(3)在應(yīng)用程序的 InitInstance 函數(shù)中初始化套接字。WSADATA wsd;WSAStartup(MAKEWORD(2,2),&wsd);(4)在對(duì)話框的 OnInitDialog函數(shù)中創(chuàng)建套接字。m_client=socke(tAF_INET,SOCK_STREAM,0);(5)處理“連接”按鈕的單擊事件,連接服務(wù)器,并設(shè)置套接字接收數(shù)據(jù)時(shí)觸發(fā)的消息。void CSocketChatKHDDlg:OnOK()/ 服務(wù)器端地址sockaddr_in serveraddr;UpdateData(TRUE);serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(m_port);serveraddr.sin_addr.S_un.S_addr = inet_addr(m_IP);if (connec(tm_client,(sockaddr*)&serveraddr,sizeof(serveraddr)!=0)MessageBox(“連接失敗”);return;ElseMessageBox(“連接成功”);WSAAsyncSelect (m_client,m_hWnd,1000,F(xiàn)D_READ);CString str,info;m_name.GetWindowTex(tstr);info.Forma(t%s- - - - - - %s,str, 進(jìn)入聊天室 );int i = send (m_client,info.GetBuffer(0),info.GetLength(),0);CDialog:OnOK();(6)處理“發(fā)送”按鈕的單擊事件,向服務(wù)器發(fā)送數(shù)據(jù)。void CSocketChatKHDDlg:OnButton1()CString str,name,info;m_name.GetWindowTex(tname);m_info.GetWindowTex(tstr);if(!name.IsEmpty()&!str.IsEmpty()info.Forma(t%s 說(shuō):%s,name,str);/ 開(kāi)始發(fā)送數(shù)據(jù)int i = send (m_client,info.GetBuffe(r0),info.GetLength(),0);m_list.AddString(info);m_info.SetWindowTex(t);(7)向?qū)υ捒蝾?lèi)中添加 ReceiveData 函數(shù),用于接收從服務(wù)器傳來(lái)的數(shù)據(jù)。void CSocketChatKHDDlg:ReceiveData()char buffer1024;/ 接收服務(wù)器端傳來(lái)的數(shù)據(jù),int num = recv(

溫馨提示

  • 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)論