版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)課題:基于C/S架構(gòu)的網(wǎng)絡(luò)聊天室設(shè)計(jì)與實(shí)現(xiàn)院 (系): 計(jì)算機(jī)工程系 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)(軟件工程)班 級(jí): 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 2014年 05月10日摘要互聯(lián)網(wǎng)聊天服務(wù)系統(tǒng)與傳統(tǒng)的電子郵件和電話交談相比,是更有效的,實(shí)時(shí)的和快速的。隨著計(jì)算機(jī)科學(xué)與技術(shù)和Internet (互聯(lián)網(wǎng))的飛速發(fā)展, 各種網(wǎng)絡(luò)聊天工具已成為人們相互學(xué)習(xí)交流溝通的一種方式。這個(gè)程序采用軟件工程的開(kāi)發(fā)方法,結(jié)合使用了網(wǎng)絡(luò)技術(shù)、以及程序設(shè)計(jì)技術(shù),并使用Visual C+ 6
2、.0作為開(kāi)發(fā)工具,使用TCP / IP協(xié)議下的一個(gè)套接字連接局域網(wǎng)聊天室的開(kāi)發(fā)。這個(gè)網(wǎng)聊天室采用傳統(tǒng)的客戶端與服務(wù)器(C/S)架構(gòu)和TCP連接方法實(shí)現(xiàn)的,它是由客戶(C)端和服務(wù)器(S)這兩個(gè)模塊組成的一個(gè)系統(tǒng)。聊天室的服務(wù)器模塊的作用主要是用來(lái)維護(hù)網(wǎng)絡(luò)上與用戶的信息有關(guān)的服務(wù),如用戶的登錄,消息的轉(zhuǎn)發(fā),用戶的信息,用戶退出等,聊天室的客戶端模塊主要包括用戶的注冊(cè)、登錄、發(fā)送私聊信息、群發(fā)消息、接收別人的信息、在線用戶列表等。使用結(jié)構(gòu)化的方法編譯整個(gè)工程,逐步完善整個(gè)系統(tǒng)的各個(gè)功能。系統(tǒng)采用套接口(CSocket)實(shí)現(xiàn)客戶端與服務(wù)器的鏈接。這個(gè)聊天室系統(tǒng)不僅提供基本的聊天功能,還添加了一些使用
3、的功能,比如注冊(cè)用戶、驗(yàn)證登陸、發(fā)送文件和私聊等。聊天室系統(tǒng)通過(guò)測(cè)試其操作簡(jiǎn)單并且靈活性好而且運(yùn)行穩(wěn)定。關(guān)鍵詞語(yǔ):MFC;套接字;TCP通信;聊天室; ABSTRACTNetwork chat service system compared with the traditional E-mail and telephone, chat is the more efficient, real-time with effective. With the quickly development of the computer science and the technology and the ra
4、pid development of the Internet (Internet), all kinds of network chat tool has become a way of people to learn from each other communication. This program USES the development method of software engineering, jion with the network programming technology, and technology, using Microsoft Visual c + + 6
5、.0 as developmenting instrument, using the TCP/IP protocol under a socket connection for the development of LAN chat room.The network chat room USES traditional client and server (C/S) architecture and TCP connection method, it is by the customer (C) the client and server (S) of the two modules of a
6、 system. The role of the chat room server module is mainly used to maintain the network with the users information services, such as user login, the forwarding of a message, the users information, the user exit, such as chat room client module mainly includes the user register, login, private chat m
7、essages, mass message, receive other peoples information, such as online user list. Structured method is used to compile the whole project, the various functions of the whole system to consummate gradually.System USES set of interface of the client and the server (CSocket links. This chat room syste
8、m not only provides the basic chat functionality, Also added like something functions, such as user registration, verify and send the file and private chat, etc. Chat room system by testing its easy operation and good flexibility and stable running.Key word : MFC and The socket and TCP communication
9、s and Chat rooms;目 錄 TOC o 1-3 h z u 第一章緒論如今的科技使網(wǎng)絡(luò)技術(shù)越來(lái)越發(fā)達(dá),人們使用網(wǎng)絡(luò)也越來(lái)越頻繁,從而使人們對(duì)網(wǎng)絡(luò)的依賴不斷的上升,出現(xiàn)了越來(lái)越離不開(kāi)網(wǎng)絡(luò)網(wǎng)絡(luò)的情況,因此產(chǎn)生的聊天工具軟件也玲瑯滿目,比如如,國(guó)外的MSN、ICQ,國(guó)內(nèi)的YY語(yǔ)音和騰訊公司開(kāi)發(fā)的微信與QQ等。由于VC+網(wǎng)絡(luò)編程技術(shù)的功能非常強(qiáng)大,所以我的畢業(yè)設(shè)計(jì)選擇使用VC+6.0為開(kāi)發(fā)平臺(tái)開(kāi)發(fā)一個(gè)聊天系統(tǒng)軟件。這個(gè)系統(tǒng)建立在微軟的VC+6.0平臺(tái)上,設(shè)計(jì)系統(tǒng)時(shí)不僅使用了C+的面向?qū)ο笤O(shè)計(jì)技術(shù)的(OOD)而且還面向?qū)ο蟮木幊蹋∣OP)原則。這個(gè)系統(tǒng)采用傳統(tǒng)的客戶端/服務(wù)器(C/S)結(jié)構(gòu)
10、模型來(lái)進(jìn)行開(kāi)發(fā),并且客戶端和服務(wù)器、客戶端和客戶端之間的通信通過(guò)套接口(CSocket)進(jìn)行的。使用C/C+語(yǔ)言開(kāi)發(fā),采用的開(kāi)發(fā)工具為微軟的VC+6.0。第一節(jié)論文的目的和意義最近這寫(xiě)年來(lái)以來(lái),隨著全球信息技術(shù)在不斷的飛速發(fā)展當(dāng)中,并且互聯(lián)網(wǎng)同時(shí)也處于快速發(fā)展之中。出于經(jīng)濟(jì)、快速、有效地處理各種各樣的問(wèn)題,使用局域網(wǎng)已成為很多企業(yè)的優(yōu)先選擇。在局域網(wǎng)這個(gè)平臺(tái)的幫助下,使企業(yè)的信息化流程越來(lái)越簡(jiǎn)單了,而且人與人之間的信息交互加快了,從而提高了每個(gè)員工的工作效率。但是隨著各個(gè)企業(yè)規(guī)模的不斷發(fā)展并擴(kuò)大,業(yè)務(wù)量也跟著不斷的處于上升階段,從而造成企業(yè)內(nèi)部信息越來(lái)越機(jī)密越來(lái)越貴重,一旦泄露將造成不可估量的
11、損失,從而使企業(yè)只讓員工通過(guò)使用局域網(wǎng)進(jìn)行工作的溝通、交流與學(xué)習(xí),從而達(dá)到避免企業(yè)內(nèi)部商業(yè)秘密通過(guò)互聯(lián)網(wǎng)這個(gè)網(wǎng)絡(luò)(Internet)流入到競(jìng)爭(zhēng)對(duì)手或者商業(yè)間諜那里去,造成不必要的損失。為了解決企業(yè)與互聯(lián)網(wǎng)之間的矛盾,各個(gè)企業(yè)提出了開(kāi)發(fā)只能在公司里面使用的聊天軟件的構(gòu)想,通過(guò)開(kāi)發(fā)局域網(wǎng)聊天軟件能達(dá)到企業(yè)的目的,使用局域網(wǎng)聊天軟件企業(yè)員工不僅可以隨時(shí)的發(fā)送和接收即時(shí)消息,而且還可以使用局域網(wǎng)召開(kāi)會(huì)議進(jìn)行網(wǎng)絡(luò)交流等,不僅可以提高企業(yè)員工的效率同時(shí)又對(duì)企業(yè)的內(nèi)部信息進(jìn)行了保密工作措施,從而最大化避免商業(yè)信息泄露。隨著市場(chǎng)經(jīng)濟(jì)的不斷發(fā)展,用戶對(duì)軟件的功能需求也越來(lái)越高,需求量也越來(lái)越大,從而促進(jìn)了即時(shí)通
12、訊的網(wǎng)絡(luò)產(chǎn)品也不斷地進(jìn)行換代更新,像浪花一樣一波又一波的向前推進(jìn)。網(wǎng)絡(luò)即時(shí)通訊軟件不論是在它的基礎(chǔ)應(yīng)用聊天這方面還是在擴(kuò)展應(yīng)用方面的文件發(fā)送語(yǔ)音聊天方面的發(fā)展都有著很大的進(jìn)步。為了各種使用人群的需求,包括移動(dòng)公司的聊天軟件飛信在內(nèi)得各種即時(shí)通訊軟件,這些軟件呢都推出了包括視頻聊天、語(yǔ)音聊天的功能模塊方便大家交流。我的這個(gè)課題是基于局域網(wǎng)聊天軟件,用C/C+編寫(xiě)的應(yīng)用程序,程序完成基本的文字聊天模塊,可作為一個(gè)簡(jiǎn)單局域網(wǎng)聊天工具。這個(gè)統(tǒng)采用了基于網(wǎng)絡(luò)編程技術(shù)套接口(CSocket)的方法開(kāi)發(fā)并實(shí)現(xiàn)了基于局域網(wǎng)聊天的功能,基于局域網(wǎng)軟件通信產(chǎn)品很多都是使用套接口(CSocket)實(shí)現(xiàn)的,這種軟件產(chǎn)
13、品在局域網(wǎng)中使用可以有效的為企業(yè)提供一種實(shí)時(shí),安全,優(yōu)良,的信息傳遞機(jī)制。實(shí)現(xiàn)它的功能難度不是很大并且不必要對(duì)企業(yè)局域網(wǎng)硬件做任何的更新或改動(dòng)從而為企業(yè)減少了很多麻煩,并且這個(gè)軟件具有實(shí)現(xiàn)低成本的優(yōu)勢(shì)和條件,它的使用不盡能有效地降低局域網(wǎng)消息傳遞的負(fù)載量而且傳遞速度快,從而能提高局域網(wǎng)使用的效率,可以很好完成企業(yè)對(duì)于局域網(wǎng)通信的需求,使企業(yè)很好的進(jìn)行日常事務(wù)的處理,進(jìn)而提高企業(yè)工作效率。 基于套接口(CSocket)的局域網(wǎng)聊天軟件很好地解釋了套接口(CSocket)信息傳遞的原則,并且在企業(yè)的實(shí)際應(yīng)用中都具有很高的價(jià)值。局域網(wǎng)聊天軟件的信息發(fā)送和接收的速度,帶寬低,安全性好,服務(wù)器容量較低,
14、易于編程等優(yōu)點(diǎn)?;谔捉涌冢–Socket)的局域網(wǎng)通信軟件使用的人群非常廣,即可以處理一般的文字通信,又能擴(kuò)展使其適應(yīng)新興的網(wǎng)絡(luò)應(yīng)用軟件,如影音數(shù)據(jù)傳輸網(wǎng)絡(luò)教育等,這些應(yīng)用都有廣泛的前景。 局域網(wǎng)的即時(shí)信息傳遞軟件大多數(shù)都是采用UDP或者 TCP協(xié)議來(lái)完成信息傳遞的,這項(xiàng)技術(shù)已經(jīng)非常成熟。UDP是一種實(shí)時(shí)的通信協(xié)議,但是傳輸?shù)臄?shù)據(jù)是不可靠的,可能又會(huì)數(shù)據(jù)的丟失,TCP是一種可靠的通信協(xié)議,數(shù)據(jù)傳遞是有鏈接的可靠的。我的這個(gè)課題就是采用TCP通信協(xié)議完成的一個(gè)局域網(wǎng)聊天室的軟件程序。第二節(jié)國(guó)內(nèi)外研究現(xiàn)狀當(dāng)今世界范圍內(nèi)各種聊天室系統(tǒng)軟件的公司很多,產(chǎn)品也各種各種各具特色,不過(guò)大體都已聊天為中心擴(kuò)
15、展其他功能,在我們國(guó)家有YY、QQ、網(wǎng)易泡泡、新浪UC、默默等產(chǎn)品,國(guó)外的有ICQ、Skype、MSN、Facebook等。在這里我主要取用戶最多的兩個(gè)產(chǎn)品進(jìn)行研究,國(guó)內(nèi)的為騰訊公司的QQ,國(guó)外的為微軟MSN,作為開(kāi)發(fā)即時(shí)通訊軟件的系統(tǒng)的一個(gè)模板。QQ作為國(guó)內(nèi)即通信軟件其市場(chǎng)占有率一直無(wú)人人能及,自騰訊公司1999年闖入即時(shí)通訊領(lǐng)域之后,它迅速占領(lǐng)了國(guó)內(nèi)市場(chǎng),并且使國(guó)內(nèi)用戶一直都是處于最多的狀態(tài),沒(méi)有一絲一毫的動(dòng)搖跡象。雖然這幾年微軟的MSN在我國(guó)有發(fā)展壯大的趨勢(shì),但是騰訊QQ的用戶量依然在逐步增長(zhǎng)中。騰訊的即時(shí)通訊軟件產(chǎn)品的成功是來(lái)源于它對(duì)QQ這個(gè)通信軟件的不斷更新不斷完善從而使QQ一直被使
16、用者稱好,這也算QQ這款軟件成功的基本原因。通過(guò)閱讀許多網(wǎng)絡(luò)上的書(shū)籍,以及自己使用MSN、QQ、YY等通訊軟件??梢钥隙ǖ氖球v訊的QQ微軟的MSN等都是多個(gè)服務(wù)器同時(shí)服務(wù),服務(wù)器控制客戶端與客戶端之間使用UDP協(xié)議進(jìn)行通信。在兩個(gè)客戶端之間不能建立正常連接的情況下騰訊QQ使用用服務(wù)器進(jìn)行消息的中轉(zhuǎn)以達(dá)到通信的目的。圖1.1 是我們經(jīng)常使用的QQ聊天軟件的客戶端-服務(wù)器模MSN與騰訊QQ不同的是他們使用協(xié)議的不同,微軟的MSN是使用TCP協(xié)議作為傳輸層通信協(xié)議,而QQ使用的UDP作為傳輸層得通信協(xié)議,服務(wù)器與所有的登陸在線客戶端進(jìn)行鏈接,并通過(guò)服務(wù)器進(jìn)行消息的中轉(zhuǎn)實(shí)現(xiàn)客戶端與客戶端之間的消息傳遞
17、。圖1.2 微軟的MSN客戶端-服務(wù)器模型從騰訊QQ的系統(tǒng)模型中我們可以觀察到的是,服務(wù)器的作用是處理客戶端的傳遞過(guò)來(lái)的各種狀態(tài)的請(qǐng)求并進(jìn)行相應(yīng)的處理響應(yīng),從而達(dá)到服務(wù)器的壓力將到最小值,但是它還是存在著一些缺點(diǎn),就是服務(wù)器客戶端之間的的協(xié)議和功能實(shí)現(xiàn)都比較復(fù)雜。然而微軟的MSN一切數(shù)據(jù)都要進(jìn)過(guò)服務(wù)器中轉(zhuǎn),由此可知道服務(wù)器承受的壓力是多么的大(所以平時(shí)使用MSN進(jìn)行語(yǔ)音視屏聊天很少)。上面的軟件都實(shí)現(xiàn)了在互聯(lián)網(wǎng)上的即時(shí)信息傳遞,在使用方面都具有自己獨(dú)特的一面,軟件的開(kāi)發(fā)方式也各不相同,但中心思想一致。伴隨著社會(huì)的發(fā)展企業(yè)的擴(kuò)大,營(yíng)業(yè)額的上漲,各個(gè)企業(yè)的競(jìng)爭(zhēng)也越來(lái)越激烈,所以企業(yè)內(nèi)的商業(yè)信息也越
18、來(lái)越機(jī)密,為了保護(hù)商業(yè)機(jī)密企業(yè)只希望員工通過(guò)局域網(wǎng)進(jìn)行工作的商討交流與資源的共享,從而避免企業(yè)內(nèi)部商業(yè)秘密通過(guò)互聯(lián)網(wǎng)(Internet)泄露到競(jìng)爭(zhēng)對(duì)手手里,從而使局域網(wǎng)的聊天軟件也隱藏著很大的用戶市場(chǎng)資源。第三節(jié) 論文的主要內(nèi)容這個(gè)課題主要研究的主要方向是使用C/C+語(yǔ)言進(jìn)行的局域網(wǎng)聊天室軟件的開(kāi)發(fā),該聊天室軟件開(kāi)發(fā)過(guò)程中采用的是精典客戶端/服務(wù)器架構(gòu)和TCP協(xié)議的有鏈接連接方法,完成用戶在客戶端與客戶端間傳遞文字信息功能。完成它的功能實(shí)現(xiàn)必須要兩個(gè)程序:一個(gè)是用于消息轉(zhuǎn)發(fā)的服務(wù)器端程序和另一個(gè)是用戶間交流的客戶端程序,調(diào)試程序時(shí)首先必須要啟動(dòng)服務(wù)器等待客戶端消息的請(qǐng)求做,服務(wù)器需要一個(gè)固定的
19、端口號(hào)和一個(gè)固定的IP地址使客戶端能連接到固定IP地址的服務(wù)器并向固定端口發(fā)送消息,當(dāng)客戶端與服務(wù)器鏈接時(shí),用戶需要注冊(cè)一個(gè)用戶名,但是如果用戶名已經(jīng)被其他已經(jīng)登錄過(guò)的客戶端注冊(cè),服務(wù)器就會(huì)發(fā)送信息告訴客戶端用戶已存在,要求重新注冊(cè)。當(dāng)用戶注冊(cè)成功后可以使用賬戶進(jìn)行登錄,登陸之后客戶端之間可以通過(guò)發(fā)送文字信息進(jìn)行聊天或信息交互。服務(wù)器模塊主要是顯示用戶信息消息的轉(zhuǎn)發(fā),和用戶登錄退出的提示;客戶端的模塊主要是文字消息的發(fā)送和接收達(dá)到聊天的目的,還有文件的發(fā)送和接收,在線用戶列表的頭像和名字顯示,老用戶的登錄和新賬戶的注冊(cè)。研究這個(gè)課題的前提的必須有一定的C/C+語(yǔ)言基礎(chǔ),并熟練運(yùn)用VC+6.0開(kāi)
20、發(fā)平臺(tái),利用套接口(socket)網(wǎng)絡(luò)編程技術(shù)并且結(jié)合TCP網(wǎng)絡(luò)協(xié)議進(jìn)行這個(gè)局域網(wǎng)聊天軟件開(kāi)發(fā)工作。在這里我選擇TCP協(xié)議卻沒(méi)有選UDP協(xié)議是為了保證可靠的信息傳遞,TCP與同于UDP協(xié)議不同的是,TCP協(xié)議往往要求在進(jìn)行可靠連接后才進(jìn)行信息的傳遞。第一章主要論述了論文的目的和意義,展示了主要的內(nèi)容和簡(jiǎn)單的介紹。第二章主要說(shuō)明了聊天系統(tǒng)在國(guó)內(nèi)外的發(fā)展具體狀況,和主流的及時(shí)通信軟件產(chǎn)品,并且將國(guó)內(nèi)外使用最多MSN聊天軟件和國(guó)內(nèi)使用最多QQ都做了簡(jiǎn)單的介紹并進(jìn)行了一些簡(jiǎn)單的對(duì)比,以加深我們對(duì)及時(shí)通信軟件的認(rèn)識(shí)。第三章主要說(shuō)明了這個(gè)軟件所需要到的軟件開(kāi)發(fā)語(yǔ)言極其使用平臺(tái),和簡(jiǎn)單描述了套接字(CSoc
21、ket)的發(fā)展歷程。第四章介紹了整個(gè)系統(tǒng)的設(shè)計(jì)和和各個(gè)模塊的作用極其功能。第五章詳細(xì)分析了如何實(shí)現(xiàn)各個(gè)功能極其作用。第六章對(duì)設(shè)計(jì)過(guò)程中可能出現(xiàn)的問(wèn)題進(jìn)行可行性分析與總結(jié),分析了整個(gè)軟件的優(yōu)點(diǎn)和缺點(diǎn),并對(duì)日后軟件的完善埋下了伏筆。 第二章 開(kāi)發(fā)環(huán)境及編程語(yǔ)言的介紹 Visual C+6.0可視化開(kāi)發(fā)環(huán)境Microsoft Visual C+ 6.0是一款可視化編程工具它是微軟出品的,它使用的范圍非常廣闊。Microsoft Visual C+ 6.0這個(gè)軟件開(kāi)發(fā)平臺(tái)是由很多部分組成的,它包含一個(gè)項(xiàng)目生成工具和一個(gè)增量連接器和文本編輯器和資源編輯器和一套在線文檔和源代碼瀏覽器,以及集成的調(diào)試工具。
22、使用Microsoft Visual C+ 6.0這個(gè)開(kāi)發(fā)平臺(tái),可以對(duì)程序進(jìn)行各種繁雜的操作,例如程序新建,刪除,修改,編譯,調(diào)試,運(yùn)行等。Microsoft Visual C+ 6.0開(kāi)發(fā)平臺(tái)采用傳統(tǒng)的多窗口多任務(wù)Windows用戶界面方便大家學(xué)習(xí)使用這個(gè)平臺(tái),也降低了平臺(tái)使用的復(fù)雜度,不僅這樣Microsoft Visual C+ 6.0開(kāi)發(fā)平臺(tái)還添加了一些獨(dú)特的個(gè)性化的特征使用方式,從而使開(kāi)發(fā)環(huán)境簡(jiǎn)單易用方便,是我們很快就能學(xué)會(huì)并且熟練運(yùn)用?;贛icrosoft Visual C+ 6.0的原始身份是一個(gè)可視化編程的軟件開(kāi)發(fā)平臺(tái),在介紹Microsoft Visual C+ 6.0的每
23、一個(gè)不可或缺部分之初,大家應(yīng)當(dāng)了解一下可視化編程是一個(gè)怎么樣的過(guò)程??梢暬幊碳夹g(shù)是目前IT界發(fā)展最快并且最引人眼球的,它吸引人的地方表現(xiàn)在它能把一些抽象的東西用圖像、圖形的方式展現(xiàn)給大家。它的應(yīng)用之一可視化編程。我們所將的可視化編程,指的是程序員在開(kāi)發(fā)軟件的時(shí)候,用我們?nèi)庋劭梢杂^察到的具有一定特殊意義的圖形,圖標(biāo),按鈕來(lái)替換以前我們手動(dòng)的制作、瀏覽、運(yùn)行這些繁雜的操作,使我們從繁重的軟件開(kāi)發(fā)表現(xiàn)出來(lái)給大家的映像就是按鈕的拖拽圖形化對(duì)象的設(shè)置,鼠標(biāo)的點(diǎn)擊以及特定對(duì)象的表現(xiàn)出特定屬性以及行為的過(guò)程和方法,使其體現(xiàn)出可視化編程的最大優(yōu)點(diǎn)易學(xué)易用,效率高。第二節(jié) 網(wǎng)絡(luò)編程20世紀(jì)80年代初期,美利堅(jiān)
24、政府下的高級(jí)工程研究機(jī)構(gòu)頒給加利福尼亞大學(xué)BERKELEY分校一比研究經(jīng)費(fèi),目的是讓加利福尼亞大學(xué)研究出在LINUX/UNIX操作系統(tǒng)完成TCP/IP協(xié)議的消息傳輸機(jī)制。在這個(gè)項(xiàng)目中研究人員通過(guò)很長(zhǎng)一段時(shí)間的艱苦鉆研為網(wǎng)絡(luò)通信TCP/IP網(wǎng)絡(luò)傳輸協(xié)議開(kāi)發(fā)了一個(gè)可行的應(yīng)用程序接口(API)。并將這個(gè)應(yīng)用程程接口,叫做套接字。直到現(xiàn)在,在網(wǎng)絡(luò)傳輸軟件的開(kāi)發(fā)中套接字(Socket接口)依然是TCP/IP網(wǎng)絡(luò)傳輸協(xié)議中運(yùn)用最簡(jiǎn)單使用最頻繁的API(應(yīng)用程序接口),也是互聯(lián)網(wǎng)(Internet)軟件應(yīng)用開(kāi)發(fā)過(guò)程中最為常見(jiàn)的API接口。單詞 socket翻譯為中文為套接字, 對(duì)于每一個(gè)程序員來(lái)說(shuō), Soc
25、ket也可以看成是一個(gè)類似于文件指針的指針,只要指向指針?biāo)傅牡刂纷x寫(xiě)數(shù)據(jù),那么他就可以說(shuō)是實(shí)現(xiàn)了雙向通信?;谶@個(gè)特套接字是網(wǎng)絡(luò)通信編程運(yùn)用中的必不可或缺的一部分。Socket套接字是一個(gè)網(wǎng)絡(luò)互連終點(diǎn)的同時(shí)并且可以是被尋址和被命名的網(wǎng)絡(luò)通信端點(diǎn),從而看出套接字的作用是多么重要。用另一句話說(shuō),網(wǎng)路互聯(lián)就是兩臺(tái)不一樣的電腦或處理器通過(guò)網(wǎng)絡(luò)相互傳遞數(shù)據(jù)的鏈接過(guò)程。每一個(gè)網(wǎng)絡(luò)會(huì)話過(guò)程中的通信末端都被網(wǎng)絡(luò)專業(yè)人員叫做網(wǎng)絡(luò)通信節(jié)點(diǎn)。若使用套接字進(jìn)行網(wǎng)絡(luò)接口相互鏈接,那么每個(gè)程序在網(wǎng)絡(luò)鏈接的末端都都要提供一個(gè)套接字作為接口,套接字接口類似于我們平??匆?jiàn)文件系統(tǒng)一樣,可以通過(guò) API接口函數(shù)在網(wǎng)絡(luò)中申請(qǐng)一個(gè)
26、特定套接字句柄來(lái)標(biāo)記套接字的屬性。雖然說(shuō)套接口類似與文件系統(tǒng),但是套接字句柄與文件句柄的意義是不相同的,文件句柄它指向的是一個(gè)固定的設(shè)備和文件, 然而套接字句柄并不是像我們想的那樣代表的是一個(gè)目標(biāo)地址或一個(gè)特定的終點(diǎn)。套接字程序的操作順序是,首先申請(qǐng)一個(gè)套接口,其次將目標(biāo)的終點(diǎn)和套接字連接起來(lái)實(shí)現(xiàn)通信。套接字函數(shù)的實(shí)現(xiàn)是底層的WinInetAPI函數(shù)的其中很重要的一部分,如果使用的是Microsoft Visual C+ 6.0類庫(kù)MFC里面的 CSocket類的話,MFC里面把套接字底層運(yùn)用函數(shù)封裝起來(lái)了構(gòu)成一個(gè)類方便了我們調(diào)用。CSocket來(lái)源于 CAsyncSocket類,它是CAsy
27、ncSocket類的子類,由于使用CAsyncSocket類的編程運(yùn)用到很多底層函數(shù)所以使用比較難,它進(jìn)行通信操作需要編寫(xiě)底層函數(shù)這樣的操作無(wú)疑是大大提高編程的可行性的行為,但是CSocket更抽象的封裝底層函數(shù),代替編程者操作難度較大的底層函數(shù),使套接字編程得到簡(jiǎn)化。但是又應(yīng)為其實(shí)CSocket類還支持了一個(gè)更加高級(jí)的,使用簡(jiǎn)單的Socket運(yùn)用方法,它熟練的通過(guò)運(yùn)用MFC類庫(kù)中序列化類的方法并運(yùn)用完成對(duì)Socket對(duì)象進(jìn)行提供和傳輸。使用Socket進(jìn)行的網(wǎng)絡(luò)編程實(shí)現(xiàn)即時(shí)通訊方式有兩種方法。一種是需要建立可靠的虛擬連接的形式叫面向連接方式或者流方式?;谶@個(gè)鏈接方式,就是兩個(gè)需要進(jìn)行通信的
28、程序在通信之前一定要先進(jìn)行建立一個(gè)虛擬的網(wǎng)絡(luò)連接環(huán)境。它的過(guò)程就像我們平時(shí)打電話,你撥打我的手機(jī)只有我點(diǎn)接聽(tīng)了,我才能接收到你在那邊說(shuō)話傳過(guò)來(lái)信息,這樣的有連接的通信叫做TCP通信協(xié)議。另一種方式叫數(shù)據(jù)報(bào)文 ,也可以稱為沒(méi)有連接方式 ,這種通信就像我們平時(shí)寄信那樣把信息寫(xiě)在紙上然后寄出去,應(yīng)為寄信要通過(guò)不同的郵局不同的郵遞員所以在信得傳遞過(guò)程中很可能丟失或殘缺不全,但是有時(shí)候后面寄出去的信件要寄到同一地點(diǎn)也會(huì)先一步到達(dá),它使用的通信協(xié)議對(duì)應(yīng)為UDP通信協(xié)議。流方式數(shù)據(jù)傳輸特點(diǎn)是可靠的數(shù)據(jù)傳輸,對(duì)發(fā)送的數(shù)據(jù)總是進(jìn)行校驗(yàn),對(duì)出錯(cuò)的數(shù)據(jù)進(jìn)行重發(fā),一般用于對(duì)出錯(cuò)要求比較高的或者說(shuō)不允許發(fā)送錯(cuò)誤的數(shù)據(jù)傳
29、輸如 telnet、ftp、文件等;數(shù)據(jù)報(bào)文方式應(yīng)為沒(méi)有進(jìn)行校檢和數(shù)據(jù)重發(fā),所以其通信效率一般比較高,一般用于對(duì)數(shù)據(jù)發(fā)送完整性不是很高的網(wǎng)絡(luò)應(yīng)用 ,例如語(yǔ)音的傳輸,文字的傳輸?shù)取R驗(yàn)閮蓚€(gè)客戶端之間的通信是使用客戶機(jī)/服務(wù)器的機(jī)制,為了數(shù)據(jù)傳輸?shù)目煽啃?所以采用了基于TCP協(xié)議的套接字編程來(lái)開(kāi)發(fā)。第三節(jié) 客戶端/服務(wù)器模式需要進(jìn)行通信的兩個(gè)客戶端之間的相互聯(lián)系的模式是客戶機(jī)/服務(wù)器模式,相當(dāng)于客戶端給服務(wù)器發(fā)送消息,服務(wù)器接收到消息后進(jìn)行數(shù)據(jù)分析,然后給客戶端提供相應(yīng)的服務(wù)。由于是不同程序之間進(jìn)行的通信屬于網(wǎng)間進(jìn)程通信是異步的而非同步的,進(jìn)行通信的程序之間不純?cè)谙嗷ヒ蕾嚨母缸雨P(guān)系,也沒(méi)有共享相同
30、的內(nèi)存區(qū)間,此時(shí)就需要一種通信機(jī)制為兩個(gè)進(jìn)程建立聯(lián)系從而實(shí)現(xiàn)數(shù)據(jù)的同步交換,以實(shí)現(xiàn)進(jìn)程間的通信。服務(wù)器/客戶機(jī)傳統(tǒng)的網(wǎng)絡(luò)應(yīng)用模式在實(shí)際使用過(guò)程中使用的方法是主動(dòng)請(qǐng)求的服務(wù)模式:即服務(wù)器要最先啟動(dòng)并且處于一直等待客戶端的服務(wù)請(qǐng)求狀態(tài),并根據(jù)接收到的客戶端請(qǐng)求作出相應(yīng)的服務(wù)和應(yīng)答:1) 建立通信通道,并打開(kāi)通道綁定本地主機(jī)IP,并告訴主機(jī)愿意在主機(jī)IP地址上接收客戶服務(wù);2) 一直等待客戶端的發(fā)送過(guò)來(lái)的服務(wù)請(qǐng)求到達(dá)特定IP地址下的服務(wù)器特定端口上,除非服務(wù)器關(guān)閉或出錯(cuò);3) 根據(jù)接收到的服務(wù)請(qǐng)求信息,判斷客戶端需要做怎么樣的服務(wù),發(fā)送出服務(wù)信號(hào)作出相應(yīng)服務(wù),服務(wù)完成后關(guān)閉連接停止通信;4) 回到第
31、二步繼續(xù)等待下一個(gè)服務(wù);5) 服務(wù)器關(guān)閉則通信中斷??蛻舳?1) 建立一個(gè)可用的通信線路套接口,并連接到固定主機(jī)的固定IP地址和固定端口號(hào)的服務(wù)器上,才能進(jìn)行通信; 2) 通信連接步驟完成后根據(jù)自己的需要向服務(wù)器發(fā)送服務(wù)請(qǐng)求,并等待服務(wù)器處理接收到到消息進(jìn)行相應(yīng)的服務(wù);3) 接收到服務(wù)器應(yīng)答后關(guān)閉通信通道完成通信。由以上我們知道:1) 服務(wù)器與客戶端是不一樣的,服務(wù)器是等待連接,客戶端是請(qǐng)求連接,因此在編程實(shí)現(xiàn)上必然存在很大差別;2) 由于服務(wù)進(jìn)程是給客戶進(jìn)程服務(wù)的所以服務(wù)進(jìn)程必須先于客戶進(jìn)程啟動(dòng)并一直存在等待客戶端服務(wù)消息,因此只要系統(tǒng)處于運(yùn)行狀態(tài),服務(wù)進(jìn)程必須處于運(yùn)行狀態(tài),直到人為的關(guān)閉服
32、務(wù)器,或者是因其他原因服務(wù)器被強(qiáng)制關(guān)閉??蛻舳朔?wù)器通信的原理圖如3所示??蛻舳丝蛻舳朔?wù)器建立服務(wù)端監(jiān)聽(tīng)等待并接受連接創(chuàng)建連接套接字發(fā)送消息Send接受消息Receive關(guān)閉套接字Close向服務(wù)端發(fā)送連接請(qǐng)求 Connect發(fā)送消息Send接受消息Receive關(guān)閉套接字Close圖2.1 系統(tǒng)實(shí)現(xiàn)原理圖客戶端/服務(wù)器實(shí)現(xiàn)通信我們可以將它簡(jiǎn)單的分為三個(gè)階段:一、數(shù)據(jù)連接套接口的建立。二、數(shù)據(jù)的傳輸,客戶端向服務(wù)器傳輸服務(wù)請(qǐng)求,服務(wù)器處理消息并把處理結(jié)果傳輸給客戶端。三、解除客戶端與服務(wù)器之間的連接。在套接字建立的通信的整個(gè)過(guò)程之間,將用到很多的函數(shù)處理不同的消息我們經(jīng)常用到的函數(shù)如下:(1
33、) AfxSocketInit():在這個(gè)函數(shù)AfxSocketInit()之中 包裝了函數(shù) WSAStartup(),通過(guò)在應(yīng)用程序的初始化的功能函數(shù)IninInstance()之中我們可以通過(guò)調(diào)用AfxSocketInit()對(duì)相應(yīng)的變量進(jìn)行初始化。(2) Create(): 其主要作用是創(chuàng)建套接字,創(chuàng)建套接字可分為本地的和網(wǎng)絡(luò)的,TCP或UDP的套接字。(3) Listen():這個(gè)函數(shù)創(chuàng)建一個(gè)并Socket并為其中申請(qǐng)進(jìn)入的連接套接口建立一個(gè)后備日志報(bào)表,方便后期的管理。(4) Connect(): 這個(gè)函數(shù)主要運(yùn)用于客戶端服務(wù)程序的開(kāi)發(fā),用于向服務(wù)器端發(fā)送客戶端的連接請(qǐng)求,完成連接。
34、(5) Accept():這個(gè)函數(shù)主要用于服務(wù)器端,用于服務(wù)器端得套接字監(jiān)聽(tīng),客戶端的連接請(qǐng)求,如果連接成功返回新的套接字描述符與客戶端通信。(6) Send():這個(gè)函數(shù)主要是用于消息的發(fā)送,客戶端或者服務(wù)器都可以使用,是網(wǎng)絡(luò)通信中用于發(fā)送消息的最常用函數(shù)之一。(7)Recv ():這個(gè)函數(shù)主要用于接收消息,運(yùn)用于TCP連接的網(wǎng)絡(luò)通信的服務(wù)器客戶端接收send函數(shù)發(fā)送來(lái)的消息。(8) Close(): 關(guān)閉套接字描述符,使描述符不可用。在一個(gè)以MFC實(shí)現(xiàn)的Socket通信過(guò)程中,里面純?cè)谥芏嗟南⒂成錂C(jī)制,當(dāng)某一消息發(fā)送時(shí),應(yīng)用程序窗口就會(huì)收到一些特定的消息,從而自動(dòng)調(diào)用響應(yīng)函數(shù),在函數(shù)中
35、我們可以運(yùn)用自己的代碼以更好的完成整個(gè)通信過(guò)程,其中常見(jiàn)的函數(shù)如下:(1) OnAccept():如果服務(wù)器的socket處于監(jiān)聽(tīng)狀態(tài)之中,當(dāng)有客戶申請(qǐng)連接的時(shí)候,OnAccept函數(shù)會(huì)被運(yùn)用程序調(diào)用,你可以在函數(shù)里面添加自己的代碼根據(jù)程序的需求完成相應(yīng)的功能。(2) OnConnect():當(dāng)客戶端的套接字向服務(wù)器申請(qǐng)鏈接之后 ,程序就會(huì)調(diào)用OnConnect()函數(shù),我們可以正在這個(gè)函數(shù)內(nèi)添加代碼根據(jù)需求完成相應(yīng)功能。(3) OnSend(): 運(yùn)用程序調(diào)用這個(gè)消息函數(shù)通知套接字現(xiàn)在可以使用send()函數(shù)來(lái)進(jìn)行信息的交互。(4) OnReceive():運(yùn)用程序調(diào)用這個(gè)消息函數(shù)通知套接字
36、現(xiàn)在可以使用Recv()函數(shù)來(lái)進(jìn)行接收消息。(5) OnCloes():這個(gè)函數(shù)主要是在關(guān)閉套接字時(shí)觸發(fā)的用于告訴程序套接字已經(jīng)關(guān)閉。第三章 需求分析由于該課題已經(jīng)有很多現(xiàn)成的系統(tǒng),由此可以斷定系統(tǒng)開(kāi)發(fā)具有一定的可行性。因此,限于篇幅的原因不對(duì)系統(tǒng)實(shí)現(xiàn)的可行性進(jìn)行敘述。需求分析是軟件開(kāi)發(fā)中的非常重要的一步,我們?cè)谧鲂枨蠓治龅臅r(shí)候應(yīng)當(dāng)盡可能做到通俗、簡(jiǎn)單、詳細(xì)。需求界定課題是開(kāi)發(fā)一個(gè)滿足用戶基本需求的局域網(wǎng)聊天室系統(tǒng)。因此需要實(shí)現(xiàn)如下最基本的需求。對(duì)服務(wù)器端和客戶端兩個(gè)應(yīng)用程序進(jìn)行開(kāi)發(fā),調(diào)試工作以達(dá)到以下目的。(1)客戶端可以與服務(wù)器進(jìn)行連接(2)客戶端與服務(wù)器端連接成功后可以與其他客戶端進(jìn)行中
37、轉(zhuǎn)通信(3)服務(wù)器端可以接收到連接信息并根據(jù)發(fā)來(lái)的信息做出反應(yīng)(4)客戶端之間除了可以在聊天室發(fā)送消息外,還可以進(jìn)行私聊(5)客戶端之間可以向聊天室發(fā)送文件,其他客戶端可以接受文件并保存根據(jù)上面的分析,開(kāi)發(fā)的聊天室應(yīng)用程序要完成的功能概況起來(lái)包括,登錄功能、驗(yàn)證用戶名和密碼的功能、聊天室內(nèi)聊天功能、私聊功能、發(fā)送文件功能和接收文件并保存功能。在設(shè)計(jì)開(kāi)發(fā)這個(gè)即時(shí)通訊軟件聊天系統(tǒng)的過(guò)程之中,要考慮到的兩個(gè)設(shè)計(jì)要點(diǎn)如下:首先,程序需要運(yùn)行于TCP/IP環(huán)境上,需要完成客戶端和服務(wù)器端這兩個(gè)運(yùn)用程序的開(kāi)發(fā)。然后,為了使用套接字消息函數(shù)我們應(yīng)當(dāng)從CSocket派生出適合自己使用的套接字類,很多時(shí)候?yàn)榱朔?/p>
38、便大家閱讀程序?qū)⒈O(jiān)聽(tīng)套接字和連接套接字分開(kāi),從而又派生出了監(jiān)聽(tīng)套接字類和用戶套接字類供程序使用。然后利用這些派生類進(jìn)行我們的程序開(kāi)發(fā)。第二節(jié) 功能界定一、簡(jiǎn)單的系統(tǒng)模塊圖根據(jù)上面的分析可以畫(huà)出程序的初步的模塊功能模塊圖如圖四所示。圖3.1 系統(tǒng)需求分析功能模塊圖整個(gè)程序組成一個(gè)聊天室,聊天室可以分為兩個(gè)程序,一個(gè)是客戶端程序,另一個(gè)服務(wù)器端程序,客戶端程序的基本功能是:用戶的登陸,和用戶的注冊(cè)、大家都可以看到的消息群發(fā)功能、一對(duì)一的私聊功能,和文件發(fā)送模塊。服務(wù)器端主要功能是: 登錄驗(yàn)證、注冊(cè)驗(yàn)證、和各種消息的轉(zhuǎn)發(fā)、用戶成功登陸后的提示信息。這就是這個(gè)系統(tǒng)簡(jiǎn)單的功能模塊分析。二、流程圖圖3.2
39、 系統(tǒng)流程以上為整個(gè)系統(tǒng)的流程圖,系統(tǒng)的運(yùn)行必須啟動(dòng)兩個(gè)程序,首先要啟動(dòng)的是服務(wù)器,然后啟動(dòng)客戶端,客戶端連接服務(wù)器,向服務(wù)器發(fā)送各種請(qǐng)求,服務(wù)器分析客戶端發(fā)送的過(guò)來(lái)的請(qǐng)求,分析請(qǐng)求作出相應(yīng)的服務(wù),服務(wù)器就相當(dāng)于一個(gè)消息的中轉(zhuǎn)站。三、用戶數(shù)據(jù)模型(E-R圖)密碼IP頭像賬號(hào)密碼IP頭像賬號(hào)用戶用戶圖3.3用戶數(shù)據(jù)模型圖每個(gè)用戶的基本息都包含(賬號(hào),密碼,頭像,IP),是每個(gè)客戶端登陸的必備條件。第三節(jié)網(wǎng)絡(luò)聊天室的主要實(shí)現(xiàn)一、登陸以及身份確定的功能實(shí)現(xiàn)用戶在登陸界面輸入用戶的用戶名和密碼,然后系統(tǒng)對(duì)登錄名和密碼進(jìn)行驗(yàn)證如果通過(guò)驗(yàn)證這進(jìn)入用戶聊天界面,如果沒(méi)有錄名和密碼通過(guò)驗(yàn)證,系統(tǒng)就會(huì)顯示下列錯(cuò)
40、誤的信息:您輸入的密碼,或賬號(hào)錯(cuò)誤,請(qǐng)確認(rèn)正確的賬號(hào)密碼后重新輸入。圖3.4用戶數(shù)據(jù)模型圖用戶登陸界面的設(shè)計(jì):采用文本框填寫(xiě)用戶名和密碼,采用IP Address控件輸入服務(wù)器IP,并使用Extend Combo Box控件選擇頭像以及還包括了登陸、取消、注冊(cè)按鈕。其中服務(wù)器默認(rèn)顯示IP為主機(jī)的虛擬IP地址,系統(tǒng)如何實(shí)現(xiàn)默認(rèn)顯示IP的方法,將IP Address控件綁定一個(gè)相對(duì)應(yīng)的CString變量,然后給這個(gè)變量賦值為的一個(gè)字符串,然后利用系統(tǒng)功能UpdateData(false)函數(shù)的方法把變量的值更新到與變量相關(guān)聯(lián)的IP Address控件上,完成默認(rèn)IP的顯示。界面上有三個(gè)按鈕(1)、
41、取消這個(gè)一個(gè)MFC的取消按鈕,沒(méi)有進(jìn)行任何的重寫(xiě),作用為推出登陸界面。(2)、注冊(cè)作用是:彈出注冊(cè)界面注冊(cè)頁(yè)面中可以輸入用戶名、密碼、年齡。注冊(cè)的功能的完成是這樣進(jìn)行的,填寫(xiě)好注冊(cè)頁(yè)面里的文本框空間以后后調(diào)用系統(tǒng)函數(shù)UpdateData(TRUE);使相應(yīng)控件的相應(yīng)變量獲取相應(yīng)的值,然后利用套接字的消息傳遞將用戶名、密碼、年齡傳遞給服務(wù)器,服務(wù)器驗(yàn)證傳過(guò)來(lái)的用戶名是否已經(jīng)注冊(cè),如果沒(méi)有注冊(cè)則服務(wù)器向注冊(cè)頁(yè)面發(fā)送注冊(cè)成功標(biāo)志LOGIN_SUCCESS,注冊(cè)頁(yè)面接收到此消息后利用MESSAGEBOX函數(shù)彈出注冊(cè)成功,否則注冊(cè)失敗,重新輸入。在這里面我們使用的winsocket套接字的原理圖如下:圖
42、3.5winsocket套接字的原理圖Winsocket套接字的使用,有圖大家可以看到要使用套接字進(jìn)行網(wǎng)絡(luò)通信,兩個(gè)程序都必須要申請(qǐng)一個(gè)套接字,服務(wù)器的套接字主要用于監(jiān)聽(tīng),接受客戶端的連接申請(qǐng),客戶端的套接字要用于申請(qǐng)連接服務(wù)器,TCP的網(wǎng)絡(luò)連接,客戶端服務(wù)器都是使用send()/recv()進(jìn)行數(shù)據(jù)交換,通信結(jié)束后關(guān)閉套接字。(3)、登陸 把用戶名,密碼和年齡利用Socket發(fā)送服務(wù)器,服務(wù)器驗(yàn)證傳遞過(guò)來(lái)的信息,如果用戶不存在或密碼錯(cuò)誤,則登陸失敗,否則登陸成功,服務(wù)器給登陸界面發(fā)送一個(gè)登陸成功消息LOGIN_SUCCESS。二、客戶端聊天功能的實(shí)現(xiàn)用戶聊天界面是這樣的標(biāo)題顯示的用戶名,接下
43、來(lái)的文本框顯示的是用戶的聊天信息,以及用戶進(jìn)入聊天室和退出聊天室的提示信息,接下來(lái)的文本框是用來(lái)輸入聊天信息的右邊的列表框是用來(lái)顯示用戶頭像和用戶名的,雙擊用戶頭像獲取用戶信息,調(diào)用UpdateData(false)使單選框打鉤發(fā)送私聊消息,接下來(lái)有一個(gè)文本框和一個(gè)按鈕,按鈕的作用是點(diǎn)擊按鈕選擇要發(fā)送的文件名,通過(guò)CFile類成員變量對(duì)應(yīng)的文件路徑和文件名通過(guò)調(diào)用函數(shù)將文件路徑分配到一個(gè)文本框綁定的變量是在文本框中顯示。在文件的最底端有4個(gè)按鈕分別是發(fā)送文件按鈕、發(fā)送聊天消息按鈕、接收文件按鈕,關(guān)閉聊天頁(yè)面按鈕。三、開(kāi)發(fā)環(huán)境與技術(shù)本系統(tǒng)使用C/C+作為開(kāi)發(fā)語(yǔ)言,使用比較經(jīng)典的比較簡(jiǎn)單的微軟的V
44、isual C+ 6.0作為開(kāi)發(fā)環(huán)境進(jìn)行開(kāi)發(fā)。開(kāi)發(fā)過(guò)程使用原型模型,即首先開(kāi)發(fā)一個(gè)比較粗糙的原型系統(tǒng)然后在基礎(chǔ)之上不斷的修正。該系統(tǒng)用到數(shù)據(jù)庫(kù)的地方使用ACCESS數(shù)據(jù)庫(kù),采用socket技術(shù),發(fā)送消息時(shí)進(jìn)行TCP連接。更為詳細(xì)的開(kāi)發(fā)環(huán)境與技術(shù)的選擇如表3.1所示。表 3.1程序開(kāi)發(fā)環(huán)境與技術(shù)參數(shù)選擇技術(shù)開(kāi)發(fā)語(yǔ)言C+開(kāi)發(fā)平臺(tái)Microsoft Visual C+ 6.0 平臺(tái)軟件開(kāi)發(fā)模型原型模型開(kāi)發(fā)技術(shù)MFC數(shù)據(jù)庫(kù)ACCESS連接方式TCP測(cè)試平臺(tái)Windows 7 Profession(一) ODBC編程技術(shù)在程序開(kāi)發(fā)過(guò)程中還運(yùn)用到了MFC的ODBD編程技術(shù),其中技術(shù)特點(diǎn)如下通過(guò)Micros
45、oft Visual C+ 6.0中類庫(kù)MFC 通過(guò)使用ODBC訪問(wèn)數(shù)據(jù)庫(kù)做一個(gè)簡(jiǎn)單講解,程序員在軟件的編寫(xiě)過(guò)程中要用到很多C/C+的技術(shù),可以根據(jù)不同的需求使用相應(yīng)的方法解決問(wèn)題,以到達(dá)縮減開(kāi)發(fā)周期,減少工作量的目的,提高了效率和軟件的可靠性。MFC的ODBC類對(duì)于一些比較復(fù)雜的ODBC API使用類進(jìn)行了封裝,并提供了一些簡(jiǎn)化的調(diào)用的功能接口函數(shù),從而很大程度上提高了數(shù)據(jù)庫(kù)應(yīng)用程序的開(kāi)發(fā)速率。使開(kāi)發(fā)人員可以不必了解ODBC API接口函數(shù)和SQL編程的具體細(xì)節(jié),利用已經(jīng)封裝好的ODBC類已經(jīng)足夠完成對(duì)數(shù)據(jù)庫(kù)的的很多操作需求。MFC的ODBC類主要包括:CDatabase類:這個(gè)類主要是完成
46、運(yùn)用程序與數(shù)據(jù)源的連接,為接下來(lái)的數(shù)據(jù)庫(kù)操作做準(zhǔn)備。CRecordset類:這個(gè)類是表示數(shù)據(jù)庫(kù)的一組數(shù)據(jù)可以成為一個(gè)記錄集,一個(gè)記錄集可以記錄一個(gè)數(shù)據(jù)表中的所有數(shù)據(jù),記錄集得獲取主要使用的是查詢(select)獲得,也可以通過(guò)多表查詢得到多個(gè)表的相關(guān)聯(lián)的記錄集,記錄集中的數(shù)據(jù)可以通過(guò)游標(biāo)進(jìn)行遍歷,也可以通過(guò)SQL語(yǔ)句進(jìn)行相應(yīng)的刪除,修改,插入等操作。CRecordView類:主要作用是為表單視圖和記錄集提供了一個(gè)直接相連的方法,利用數(shù)據(jù)交換機(jī)制把記錄集里面的數(shù)據(jù)顯示到表單數(shù)據(jù)的控件之上顯示出來(lái)。方便用戶對(duì)數(shù)據(jù)集的瀏覽插入刪除和更新,在關(guān)閉空間時(shí)關(guān)閉記錄集。CFieldExchange類:主要用
47、于記錄集中的字段進(jìn)行互換,就是將數(shù)據(jù)庫(kù)表中的指端與相應(yīng)的記錄集中的數(shù)據(jù)成員進(jìn)行數(shù)據(jù)交換。并且屬于CDataExchange類功能的數(shù)據(jù)交換。CDBException類:這個(gè)類主要是說(shuō)明ODBC類在使用過(guò)程中發(fā)生錯(cuò)誤或異常。根據(jù)以上內(nèi)容我們總結(jié)出,CDatabase針對(duì)的是數(shù)據(jù)庫(kù)本身,它的主要任務(wù)是連接數(shù)據(jù)源,開(kāi)始準(zhǔn)備數(shù)據(jù)庫(kù)的操作工作;CRecordset主要作用是獲取數(shù)據(jù)源中的數(shù)據(jù)保存到記錄集之中,并且對(duì)記錄集進(jìn)行操作;CRecordView記錄集的顯示,方便觀察修改,而CFieldExchange的作用是使數(shù)據(jù)集的數(shù)據(jù)與數(shù)據(jù)源表中的相對(duì)應(yīng)數(shù)據(jù)進(jìn)行交換。(二) MFC技術(shù)MFC是在VC+6.0
48、環(huán)境下編寫(xiě)的應(yīng)用程序的一個(gè)框架和引擎,是掛在C+ SDK(專業(yè)軟件開(kāi)發(fā)平臺(tái))上的一個(gè)輔助軟件開(kāi)發(fā)包。MFC并不單單是一個(gè)功能簡(jiǎn)單的界面開(kāi)發(fā)系統(tǒng),雖說(shuō)MFC提供的類絕大部分是用來(lái)進(jìn)行界面開(kāi)發(fā)的設(shè)計(jì)的,關(guān)聯(lián)一個(gè)窗口的動(dòng)作函數(shù),但是MFC還有許多類是用來(lái)在windows中內(nèi)部處理的類,比如說(shuō)數(shù)據(jù)庫(kù)管理的類,還有網(wǎng)絡(luò)傳輸?shù)念惖鹊?,這些都是windows內(nèi)部處理的,并不是界面類。MFC有六大應(yīng)用機(jī)制:程序啟動(dòng)機(jī)制,窗口創(chuàng)建機(jī)制,消息映射機(jī)制,運(yùn)行時(shí)類信息機(jī)制,動(dòng)態(tài)創(chuàng)建機(jī)制,對(duì)象序列化機(jī)制。動(dòng)態(tài)創(chuàng)建是在程序運(yùn)行時(shí)創(chuàng)建指定的類的對(duì)象。永久保存是在MFC當(dāng)中的連續(xù)存儲(chǔ)機(jī)制,能夠像別的容器一樣連續(xù)的存儲(chǔ)并且能夠
49、按順序的取出,其實(shí)它跟鏈表容器差不多。消息映射,在windows的MFC編程中我們會(huì)大量的用到,當(dāng)我們的鼠標(biāo)點(diǎn)擊某些按鈕等操作的時(shí)候就會(huì)觸發(fā)一個(gè)消息,就會(huì)出現(xiàn)消息響應(yīng)的事件讓這個(gè)時(shí)間去完成我們所需要完成的事情。消息傳遞,這就是如何去調(diào)用消息映射當(dāng)中的一個(gè)過(guò)程了,當(dāng)觸發(fā)一個(gè)消息的時(shí)候窗口處理函數(shù)是如何去獲取知道這個(gè)函數(shù)的,這就需要消息的傳遞來(lái)完成。四、性能要求對(duì)于性能的要求,首先程序必須能運(yùn)行起來(lái),其次程序必須具有可靠性,可以對(duì)很多應(yīng)為系統(tǒng)而造成的一些錯(cuò)誤進(jìn)行簡(jiǎn)單的處理,比如應(yīng)對(duì)一些突發(fā)性的事件:網(wǎng)絡(luò)連接錯(cuò)誤,對(duì)方程序出現(xiàn)錯(cuò)誤突然下線,要求系統(tǒng)必須盡可能多的,竟可能正確的處理這些事件,并且采用相
50、應(yīng)的措施防止這些事件的發(fā)生,當(dāng)事件發(fā)生時(shí)盡可能向用戶反映清楚的表達(dá)出錯(cuò)信息。程序的容錯(cuò)性要好,當(dāng)系統(tǒng)運(yùn)行時(shí)出現(xiàn)錯(cuò)誤以及,用戶操作時(shí)不小心操作錯(cuò)誤,這些都有可能是程序崩潰,或者程序已經(jīng)關(guān)閉但是還是占用著內(nèi)純的假死狀況。程序的開(kāi)發(fā)文檔要清晰易懂,簡(jiǎn)潔明了,這個(gè)是為了防止如果系統(tǒng)開(kāi)發(fā)到一半要,自己沒(méi)有時(shí)間要交給別人進(jìn)行開(kāi)發(fā)時(shí),或者由于各種不同因素而要重新開(kāi)發(fā),那么一個(gè)好的開(kāi)發(fā)文檔這時(shí)候就能起到很大的作用。對(duì)于我們開(kāi)發(fā)出來(lái)的軟件,我們要盡量做到其運(yùn)行要求的硬件環(huán)境盡可能的低,對(duì)內(nèi)存的占用盡可能少,程序的運(yùn)行速率盡可能的快,并且程序運(yùn)行過(guò)程中沒(méi)有發(fā)生內(nèi)存泄露這樣的錯(cuò)誤事件,并且程序要具有易維護(hù)性,具有擴(kuò)
51、展空間,所以開(kāi)發(fā)是一定要使用模塊化快化開(kāi)發(fā),各個(gè)模塊之間不要有太多的關(guān)系,以免造成錯(cuò)誤的時(shí)候難以發(fā)現(xiàn)并修改。五、可行性研究(一) 成本可行性分析這個(gè)軟件是我們的畢業(yè)設(shè)計(jì),在這里開(kāi)發(fā)的目的明顯不是為了經(jīng)濟(jì)利益,所以不用考慮成本以及銷售推廣等問(wèn)題。(二) 技術(shù)可行性分析開(kāi)發(fā)所需要的硬件平臺(tái)是一臺(tái)PC機(jī),機(jī)器上運(yùn)行的是Microsoft Visual C+ 6.0軟件開(kāi)發(fā)平臺(tái),使用的是C/C+語(yǔ)言,所用到的知識(shí)是Socket網(wǎng)絡(luò)編程技術(shù),和MFC對(duì)話框程序編程,而所用到的這些技術(shù)都是前人用過(guò)得,已經(jīng)熟練的不能再熟練的東西,而且前人也應(yīng)經(jīng)使用相應(yīng)技術(shù)開(kāi)發(fā)出類似的很多軟件產(chǎn)品,因此,開(kāi)發(fā)這個(gè)程序不存在什
52、么技術(shù)運(yùn)用上的難點(diǎn),完全是可行的。第四章 系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)包括詳細(xì)設(shè)計(jì)和概要設(shè)計(jì)。概要設(shè)計(jì)完成的工作主要是程序的流程圖,數(shù)據(jù)庫(kù)設(shè)計(jì),程序詳細(xì)的數(shù)據(jù)流圖和功能模塊圖。詳細(xì)設(shè)計(jì)是在總體設(shè)計(jì)的基礎(chǔ)之上對(duì)程序?qū)崿F(xiàn)的細(xì)節(jié)問(wèn)題進(jìn)行分析。第一節(jié)系統(tǒng)程序流程圖程序流程圖能夠很好的說(shuō)明程序執(zhí)行過(guò)程,是程序執(zhí)行的一個(gè)過(guò)程呈現(xiàn)。結(jié)束程序結(jié)束程序啟動(dòng)運(yùn)行服務(wù)器是是判斷連接請(qǐng)求已經(jīng)登入聊天室已近退出聊天室退出服務(wù)器程序開(kāi)始否否是是圖4.1 系統(tǒng)總工作流程圖首先我們應(yīng)當(dāng)啟動(dòng)聊天室軟件的服務(wù)端程序,程序里面已經(jīng)設(shè)置服務(wù)器端口并且已經(jīng)打開(kāi)監(jiān)聽(tīng)。然后我們打開(kāi)運(yùn)行客戶端程序,并且在登陸頁(yè)面的文本框輸入服務(wù)器地址、用戶名、密碼等信
53、息點(diǎn)擊登錄,開(kāi)始連接服務(wù)器并將文本框里輸入的用戶名和密碼并發(fā)送到已經(jīng)連接的服務(wù)器。服務(wù)器接收后,在本地?cái)?shù)據(jù)庫(kù)中查詢確定是否存在對(duì)應(yīng)的用戶信息。如果存在,進(jìn)入聊天室。如果不存在,想客戶端發(fā)送消息??蛻舳颂崾镜卿浭?。進(jìn)入聊天室后,服務(wù)器將就收到的登錄消息分發(fā)給各個(gè)在線用戶并做出提示,這個(gè)聊天室軟件各個(gè)客戶端可以通過(guò)服務(wù)器的消息轉(zhuǎn)發(fā)機(jī)制服務(wù)可以實(shí)現(xiàn)簡(jiǎn)單的文在群聊和私聊的聊天功能。當(dāng)用戶發(fā)送某條特定信息以后,服務(wù)器就會(huì)就收用戶發(fā)送過(guò)來(lái)的信息,然后服務(wù)器進(jìn)行判斷消失是群發(fā)還是私聊,如果為私聊就找到相應(yīng)用戶的通信套接字并發(fā)送聊天消息,如果是群發(fā)就想每個(gè)在線用法發(fā)送一條同樣的消息。從而實(shí)現(xiàn)了進(jìn)入服務(wù)器的用
54、戶可以實(shí)現(xiàn)群聊和私聊的聊天功能。每當(dāng)有用客戶端進(jìn)入聊天室以后,客戶端就會(huì)給服務(wù)器端發(fā)送一個(gè)用戶的登陸的服務(wù)消息,服務(wù)器這邊接收到相應(yīng)的服務(wù)消息后會(huì)給所有的在線用戶發(fā)送一條用戶上線消息通知讓大家知道有人進(jìn)入聊天室。當(dāng)用戶斷開(kāi)連接下線后也會(huì)給服務(wù)器發(fā)送一條消息告知服務(wù)器自己下線,服務(wù)器接收到消息后也會(huì)分發(fā)給每個(gè)在線用戶通知其下線。此外,系統(tǒng)還提供了文件發(fā)送和接收功能,一個(gè)客戶端之間的文件傳輸。這個(gè)聊天室使用的是CSocket網(wǎng)絡(luò)編程,運(yùn)用TCP的網(wǎng)絡(luò)協(xié)議,這個(gè)協(xié)議要求每個(gè)用戶建立連接之后才可以實(shí)現(xiàn)數(shù)據(jù)的接收和發(fā)送。第二節(jié) 數(shù)據(jù)庫(kù)設(shè)計(jì)當(dāng)客戶點(diǎn)擊注冊(cè)按鈕,可以注冊(cè)一個(gè)用戶,并將注冊(cè)信息發(fā)送到服務(wù)器。服
55、務(wù)器端接收到發(fā)來(lái)的信息,存入數(shù)據(jù)庫(kù)中,并發(fā)送消息告訴客戶端注冊(cè)成功。客戶端登陸時(shí)發(fā)送用戶名和密碼到服務(wù)器。服務(wù)器端查詢數(shù)據(jù)庫(kù),如果存在對(duì)應(yīng)的記錄告訴客戶端登陸成功,客戶端接收到消息后,登陸到聊天室系統(tǒng)的主界面。聊天室系統(tǒng)數(shù)據(jù)庫(kù)使微軟的ACCESS 2003進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。數(shù)據(jù)庫(kù)名為Demo.mdf,數(shù)據(jù)庫(kù)表明為USER。表中包含的字段:Name,password, age。其中Name這張表的主鍵。第三節(jié) 界面設(shè)計(jì)界面是用戶和系統(tǒng)交互的唯一的通道。界面設(shè)計(jì)的好壞直接影響到用戶體驗(yàn)。因此,界面設(shè)計(jì)對(duì)于程序設(shè)計(jì)具有重要的作用。界面設(shè)計(jì)應(yīng)遵循的簡(jiǎn)單,快捷的原則。在突出位置的主要功能。在設(shè)計(jì)的過(guò)程中界面
56、占有相當(dāng)大的一個(gè)比例,當(dāng)你掌握了程序設(shè)計(jì)的核心內(nèi)容,并且通過(guò)實(shí)踐完成的系統(tǒng)功能,接下來(lái)要面對(duì)的就是界面設(shè)計(jì)這個(gè)模塊。一個(gè)優(yōu)良美觀的用戶界面會(huì)使使用者身心愉悅,會(huì)讓功能簡(jiǎn)單明了,也會(huì)使用戶的的到視覺(jué)的享受。一、登陸模塊界面設(shè)計(jì)客戶端啟動(dòng)后展現(xiàn)給用戶的第一個(gè)界面就是登錄界面。登錄界面應(yīng)該讓用戶輸入最少的信息,因此,使用默認(rèn)端口號(hào)。輸入的信息應(yīng)該包括服務(wù)器ip地址,用戶名,密碼,登錄頭像。按鈕包括登錄,注冊(cè)和退出。登錄模塊的最終呈現(xiàn)的效果如圖6所示。圖4.2 局域網(wǎng)聊天室的主頁(yè)面二、服務(wù)器界面設(shè)計(jì)服務(wù)器只是作為客戶端登錄和發(fā)送消息的一個(gè)簡(jiǎn)單的中轉(zhuǎn)。因此,服務(wù)器端的界面沒(méi)有必要像客戶端那樣。只需要簡(jiǎn)單
57、的呈現(xiàn)在線用戶,用戶所做操作提示等。服務(wù)器端設(shè)計(jì)的最終界面如圖7所示。圖 4.3服務(wù)器端的界面設(shè)計(jì)三、聊天室界面設(shè)計(jì)聊天室是客戶端登陸成功后最多接觸的界面,程序的主要功能都集中在該界面。該界面應(yīng)該實(shí)現(xiàn)在線用戶提示,聊天室聊天,私聊聊天發(fā)送文件等功能。綜合以上分析,聊天室界面最后只能夠設(shè)計(jì)結(jié)果如圖8所示。圖4.4 聊天室界面設(shè)計(jì)第五章 編碼設(shè)計(jì)編碼設(shè)計(jì)是以程序最終用代碼形式展現(xiàn)出來(lái)的一個(gè)步驟。前面的需求分析和總體設(shè)計(jì)都是為了進(jìn)一步的完成編碼設(shè)計(jì)二設(shè)定。編碼設(shè)計(jì)是程序最終實(shí)現(xiàn)的最為繁瑣的一個(gè)環(huán)節(jié),為了統(tǒng)一編碼風(fēng)格,對(duì)常用的接口進(jìn)行封裝,是代碼可重用性高。編碼設(shè)計(jì)階段一班都由以下幾個(gè)原則組成。具有良
58、好的編碼風(fēng)格,變量的命名方法與傳統(tǒng)的駱駝和匈牙利命名的名字。將代碼按照不同的功能,封裝成不同放得函數(shù)。負(fù)責(zé)數(shù)據(jù)庫(kù)使用代碼的實(shí)現(xiàn)和負(fù)責(zé)Socket通信的代碼的實(shí)現(xiàn)封裝成類方便調(diào)用。為了避免多線程產(chǎn)生的時(shí)間空間不一致性,在程序編碼實(shí)現(xiàn)中不適合應(yīng)用多線程機(jī)制進(jìn)行編程。發(fā)送的消息應(yīng)該是格式化的進(jìn)行封裝的消息,將分析格式化消息和封裝格式化消息的代碼做成函數(shù)。根據(jù)上述的所說(shuō)編碼規(guī)則,下文將程序?qū)崿F(xiàn)各個(gè)功能的主要代碼介紹如下??蛻舳司幋a設(shè)計(jì)登陸模塊編碼設(shè)計(jì)客戶端登陸模塊完成與客戶端建立連接,并將用戶名和密碼封裝成消息發(fā)送并等待接受服務(wù)器端發(fā)來(lái)的消息。登陸模塊的編碼如下所示。void CLoginDlg:On
59、OK() / TODO: Add extra validation hereUpdateData(TRUE);PicNum = m_Picture.GetCurSel();m_nIp.GetWindowText(m_strIP,16);CString Name=m_strName;if(!m_SockClient.Login(Name)MessageBox(用戶名稱錯(cuò)誤,請(qǐng)重新登錄!);return;CDialog:OnOK();利用MFC的消息機(jī)制點(diǎn)擊登陸,獲取文然后,框里面的各種信息,然后用CReLoClient 變量m_SockClient調(diào)用Login(),函數(shù)向客戶端發(fā)送登陸信息,并
60、接受服務(wù)器返回消息,完成登陸驗(yàn)證。二、注冊(cè)模塊的編碼設(shè)計(jì)注冊(cè)模塊主要是根據(jù)填寫(xiě)的注冊(cè)信息封裝消息發(fā)送到服務(wù)器,然后根據(jù)服務(wù)器的提示,給出用戶提示。具體的代碼如下。void CLoginDlg:OnRegister() / TODO: Add your control notification handler code hereCREgister Reg;Reg.DoModal();以上代碼實(shí)現(xiàn)的功能是彈出注冊(cè)頁(yè)面。void CREgister:OnYes() / TODO: Add your control notification handler code here/int flag=0;U
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024適用型貸款利息合同書(shū)樣本版
- 2025年度彩色印刷設(shè)備升級(jí)改造合同3篇
- 2024年度城市基礎(chǔ)設(shè)施建設(shè)項(xiàng)目合同
- 二零二五年度綠色能源開(kāi)發(fā)項(xiàng)目承包合同范本3篇
- 2025年度航空航天零部件定制設(shè)計(jì)與運(yùn)輸服務(wù)合同3篇
- 2024物業(yè)委托經(jīng)營(yíng)管理合同
- 2025年水果種植基地與冷鏈物流公司合作合同3篇
- 二零二五版科技型企業(yè)貸款合同中的物權(quán)擔(dān)保與研發(fā)成果3篇
- 2025年蔬菜廢棄物資源化利用合作合同3篇
- 二零二五年版市政工程招標(biāo)投標(biāo)合同模板3篇
- 物業(yè)民法典知識(shí)培訓(xùn)課件
- 2023年初中畢業(yè)生信息技術(shù)中考知識(shí)點(diǎn)詳解
- 2024-2025學(xué)年山東省德州市高中五校高二上學(xué)期期中考試地理試題(解析版)
- 《萬(wàn)方數(shù)據(jù)資源介紹》課件
- 麻風(fēng)病病情分析
- 《急診科建設(shè)與設(shè)備配置標(biāo)準(zhǔn)》
- 第一章-地震工程學(xué)概論
- JJF(陜) 063-2021 漆膜沖擊器校準(zhǔn)規(guī)范
- TSGD7002-2023-壓力管道元件型式試驗(yàn)規(guī)則
- 2024年度家庭醫(yī)生簽約服務(wù)培訓(xùn)課件
- 建筑工地節(jié)前停工安全檢查表
評(píng)論
0/150
提交評(píng)論