九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

計(jì)算機(jī)優(yōu)秀畢業(yè)論文設(shè)計(jì)

上傳人:仙*** 文檔編號(hào):84708927 上傳時(shí)間:2022-05-04 格式:DOC 頁(yè)數(shù):72 大?。?77.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
計(jì)算機(jī)優(yōu)秀畢業(yè)論文設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共72頁(yè)
計(jì)算機(jī)優(yōu)秀畢業(yè)論文設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共72頁(yè)
計(jì)算機(jī)優(yōu)秀畢業(yè)論文設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共72頁(yè)

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《計(jì)算機(jī)優(yōu)秀畢業(yè)論文設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《計(jì)算機(jī)優(yōu)秀畢業(yè)論文設(shè)計(jì)(72頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、word本科畢業(yè)設(shè)計(jì)(論文)題目名稱(chēng):基于VC+的企業(yè)內(nèi)部通信軟件的設(shè)計(jì)與實(shí)現(xiàn) 學(xué) 院: 計(jì)算機(jī)科學(xué)與技術(shù) 專(zhuān)業(yè)年級(jí): 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生某某:班級(jí)學(xué)號(hào):指導(dǎo)教師:二一四 年 六 月 六 日67 / 72摘 要八十年代初,美國(guó)政府的高級(jí)研究工程機(jī)構(gòu)ARPA給加利福尼亞大學(xué)Berkeley分校提供了資金,讓他們?cè)赨NIX操作系統(tǒng)下實(shí)現(xiàn)TCP/IP協(xié)議。在這個(gè)項(xiàng)目中,研究人員為T(mén)CP/IP網(wǎng)絡(luò)通信開(kāi)發(fā)了一個(gè)API應(yīng)用程序接口。這個(gè)API稱(chēng)為Socket接口套接字。今天,SOCKET接口是TCP/IP網(wǎng)絡(luò)最為通用的API,也是在INTERNET上進(jìn)展應(yīng)用開(kāi)發(fā)最為通用的API。隨著網(wǎng)絡(luò)技術(shù)的開(kāi)展與

2、人們生活的需求,網(wǎng)絡(luò)通信已越來(lái)越受到人們的親睞。本課題是開(kāi)發(fā)一個(gè)基于UDP的企業(yè)內(nèi)部通信系統(tǒng),既可以應(yīng)用于封閉的局域網(wǎng)環(huán)境下,也可以在互聯(lián)網(wǎng)的環(huán)境下使用。本軟件是基于VC+6.0開(kāi)發(fā)的,采用軟件工程的方法,應(yīng)用了程序設(shè)計(jì)技術(shù)、網(wǎng)絡(luò)技術(shù),運(yùn)用了WINSOCK相關(guān)API接口。WINSOCK 是在Windows進(jìn)展網(wǎng)絡(luò)通信編程的API接口,也是Windows網(wǎng)絡(luò)編程的標(biāo)準(zhǔn)。研究的主要內(nèi)容是如何利用套接字編寫(xiě)網(wǎng)絡(luò)通信程序,主要完成了客戶端的發(fā)送信息,發(fā)送圖片與顯示在線用戶與多人聊天,文件傳輸?shù)裙ぷ?。文件傳輸功能是本軟件系統(tǒng)的一個(gè)亮點(diǎn),它可以讓兩個(gè)用戶之間實(shí)現(xiàn)文件的傳遞。通過(guò)聊天工具的使用,讓分布在不同

3、地點(diǎn)、使用不同機(jī)器的一組用戶能夠與時(shí)進(jìn)展信息交流,以達(dá)到信息共享的目的,從而提高工作或者生活效率。通過(guò)測(cè)試,本軟件操作簡(jiǎn)單,靈活性好,運(yùn)行也比擬穩(wěn)定,可以廣泛使用。關(guān)鍵字 : UDP;VC+6.0;WINSOCK;網(wǎng)絡(luò)通信 AbstractThe early 80s, the U.S. governments Advanced Research Project agency (ARPA) to the University of California, Berkeley provided funding to enable them to achieve in the UNIX operati

4、ng system, TCP / IP protocol. In this project, researchers for the TCP / IP Network munication Development an API (application program interface). This API is called Socket Interface (socket). Today, SOCKET interface is a TCP / IP network of the most mon API, is the INTERNET application development

5、on the most mon API.With the development of network technology and the demand of peoples life, network munication has been more and more get the favor of people. This topic is to develop an internal munication system based on UDP, local area network (LAN) can be used in a closed environment, also ca

6、n be used under the environment of Internet. This software is based on vc + + 6.0 development, adopt the method of software engineering, application programming technology, network technology, using the WINSOCK API interface.WINSOCK is in Windows network munication programming API interface, also is

7、 the standard of Windows network programming.The main content of the research is how to use the socket network munication program, mainly pleted the client sends a message, send pictures to show online users and many people chat, file transfer, etc.File transfer function is one of the highlights of

8、this software system, it can realize the file transfer between two users.Through the use of chat, let distribution in different locations, a group of users will be able to use different machine exchange of information in a timely manner, in order to achieve the purpose of information sharing, so as

9、to improve the efficiency of work or life.Through test, the software operation is simple, flexibility is good, operation is stable, can be widely used.Key words:UDP;VC+6.0;WINSOCK;Network munication目錄摘 要IAbstractII第1章 緒 論11.1 課題選題背景11.2 國(guó)內(nèi)外現(xiàn)狀分析和研究成果11.3 課題研究?jī)?nèi)容與意義2第2章相關(guān)技術(shù)概述32.1 開(kāi)發(fā)環(huán)境32.1.1 開(kāi)發(fā)工具簡(jiǎn)介32.1.

10、2 Visual C+ MFC概述32.2 WinSock網(wǎng)絡(luò)編程32.2.1Socket簡(jiǎn)介42.2.2開(kāi)發(fā)Windows Sockets網(wǎng)絡(luò)通信程序的軟、硬件環(huán)境42.2.3CSocket類(lèi)編程模型52.2.4用VC6.0進(jìn)展Windows Sockets程序開(kāi)發(fā)的技術(shù)要點(diǎn)52.3 TCP/IP協(xié)議概述6第3章 軟件需求分析73.1需求分析73.1.1功能需求分析73.1.2數(shù)據(jù)需求分析73.1.3性能需求分析73.1.4運(yùn)行需求分析83.2 可行性分析83.2.1 經(jīng)濟(jì)可行性分析83.2.2 技術(shù)可行性分析83.2.3 運(yùn)行可行性分析8第4章軟件系統(tǒng)設(shè)計(jì)94.1概要設(shè)計(jì)94.2根本框架設(shè)

11、計(jì)104.2.1宏和數(shù)據(jù)結(jié)構(gòu)的定義104.2.2程序配置文件104.2.3調(diào)試模塊104.2.4主界面初始化114.2.5主界面布局154.2.6自繪按鈕164.2.7自繪好友列表框184.3好友管理194.3.1添加好友194.3.2刪除好友214.3.3與好友保持連接224.4聊天模塊234.5聊天室模塊264.6傳送文件模塊294.7共享屏幕模塊324.8白板模塊34第5章 軟件測(cè)試365.1 軟件測(cè)試的目的365.2 軟件測(cè)試方法分類(lèi)365.2.1 靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試365.2.2 黑盒測(cè)試與白盒測(cè)試365.2.3 測(cè)試中的錯(cuò)誤分類(lèi)375.3 通訊軟件測(cè)試385.3.1 測(cè)試用例設(shè)計(jì)要

12、求385.3.2 聊天模塊測(cè)試用例385.4 測(cè)試總結(jié)38結(jié) 論40致 謝41參考文獻(xiàn)42附 錄43第1章 緒 論1.1 課題選題背景近年來(lái),隨著全球信息化的不斷開(kāi)展,網(wǎng)絡(luò)也在飛速開(kāi)展。我們都知道局域網(wǎng)的存在,特別是在大型企業(yè),比如銀行、公安機(jī)關(guān)等等對(duì)網(wǎng)絡(luò)安全要求特別嚴(yán)格的企業(yè)單位都會(huì)有自己的局域網(wǎng),因?yàn)榫钟蚓W(wǎng)的安全可靠,使其不容易受到網(wǎng)絡(luò)病毒的攻擊,所以局域網(wǎng)得以在企業(yè)之中廣泛應(yīng)用。然而,任何企業(yè)的內(nèi)部都是離不開(kāi)通訊的,所以企業(yè)內(nèi)部通信軟件就應(yīng)運(yùn)而生了。這種通信軟件是專(zhuān)為局域網(wǎng)通信而開(kāi)發(fā)的,它適用于局域網(wǎng),同時(shí)也促進(jìn)了局域網(wǎng)的開(kāi)展,局域網(wǎng)開(kāi)展又給通信軟件帶來(lái)了更多應(yīng)用的機(jī)會(huì),可以說(shuō),局域網(wǎng)通

13、信工具和局域網(wǎng)二者之間相輔相成,相互促進(jìn)。開(kāi)展到今天,大多數(shù)企業(yè)都應(yīng)用了局域網(wǎng),可見(jiàn)其在當(dāng)今社會(huì)的重要地位。應(yīng)用局域網(wǎng)辦公的企業(yè),必須要有自己企業(yè)內(nèi)部的通訊軟件,然而,現(xiàn)在,在廣域網(wǎng)上,可盈利的通訊軟件到處都是,而局域網(wǎng)內(nèi)的通訊軟件卻很少,在功能上,也是參差不齊。因此,為了企業(yè)更好、更安全的通訊,我想到開(kāi)發(fā)一款適用于企業(yè)的局域網(wǎng)通信軟件,恰好通過(guò)我的大學(xué)所學(xué),我有信心在教師的講解和指導(dǎo)下,很好的完成這任務(wù)。最后,教師為我選定了基于VC+企業(yè)內(nèi)部通信軟件的設(shè)計(jì)與實(shí)現(xiàn)這一題目。1.2 國(guó)內(nèi)外現(xiàn)狀分析和研究成果即時(shí)通訊工具是目前使用最為普遍的網(wǎng)絡(luò)應(yīng)用軟件之一,繼 出現(xiàn)在我們的計(jì)算機(jī)上之后,網(wǎng)易、新浪

14、、搜狐等知名公司也迫不與待地參加了這一領(lǐng)域的競(jìng)爭(zhēng),而微軟、雅虎、AOL的國(guó)際巨頭公司也一刻沒(méi)有停止自己擴(kuò)X的腳步。國(guó)內(nèi)在使用的最普與的就是騰訊 ,微軟的MSN也受到商務(wù)人士的青睞;國(guó)外主要使用的是由美國(guó)在線出的ICQ、AMI以與微軟的MSN等。目前,windows平臺(tái)方面的即時(shí)通訊軟件已經(jīng)很多,但是其他系統(tǒng)的比擬少,例如Linux平臺(tái),雖然有類(lèi)似 方面的一些產(chǎn)品,比如Linux 、Luna ,但是數(shù)量畢竟不多且功能界面等都還不太理想;面向企業(yè)的即時(shí)通訊軟件雖然比擬多,但是除了 、微軟等公司的產(chǎn)品,其他的產(chǎn)品都還比擬年輕,推出時(shí)間較短,且用戶較少。鑒于此種情況,很多公司都在開(kāi)發(fā)新的即時(shí)通訊工具軟

15、件,利用新的技術(shù)開(kāi)發(fā),使客戶端和服務(wù)器端的性能和功能都得到一定的提升,適合在企業(yè)內(nèi)部網(wǎng)絡(luò)和互聯(lián)網(wǎng)上運(yùn)行,同時(shí)使其具備跨平臺(tái)的特性,方便在各個(gè)系統(tǒng)上運(yùn)行。另外,許多企業(yè)已經(jīng)應(yīng)用了即時(shí)通訊類(lèi)產(chǎn)品作為內(nèi)部交流的平臺(tái)。但絕大多數(shù)企事業(yè)單位只把即時(shí)通訊類(lèi)產(chǎn)品作為邊緣產(chǎn)品,沒(méi)有充分的認(rèn)識(shí)到即時(shí)通訊類(lèi)產(chǎn)品在工作中的重要作用,沒(méi)有想過(guò)去如何正確的應(yīng)用。還有許多企事業(yè)單位使用網(wǎng)絡(luò)個(gè)人交流工具如 ,MSN,但存在許多安全隱患。許多開(kāi)發(fā)商并沒(méi)有將此產(chǎn)品作為公司的重點(diǎn),也并沒(méi)有從客戶的角度出發(fā),只是在產(chǎn)品線上附加即時(shí)通訊產(chǎn)品,做的不夠完善,使此產(chǎn)品淪為邊緣產(chǎn)品,從而導(dǎo)致即時(shí)通訊產(chǎn)品市場(chǎng)萎縮。隨著我們國(guó)家的信息化飛速開(kāi)

16、展,許多企事業(yè)單位信息化程度大幅度提高。企事業(yè)單位非常需要使用內(nèi)部即時(shí)通訊產(chǎn)品來(lái)提高工作效率。1.3 課題研究?jī)?nèi)容與意義為了保障通信安全,建設(shè)內(nèi)網(wǎng)、專(zhuān)網(wǎng)是一個(gè)解決這一問(wèn)題的方法,隨著企業(yè)業(yè)務(wù)X圍的不斷擴(kuò)大,網(wǎng)絡(luò)規(guī)模也在擴(kuò)大,采用該方案的話,本錢(qián)必然非常高。由于公眾信息網(wǎng)是對(duì)整個(gè)社會(huì)開(kāi)放的公眾根底網(wǎng)絡(luò),具有覆蓋性X圍廣、速度快、費(fèi)用低、使用方便等特點(diǎn),但同時(shí)卻存在著安全性差的問(wèn)題。用戶通過(guò)公眾信息網(wǎng)來(lái)傳輸?shù)男畔ⅲ趥鬏數(shù)倪^(guò)程中可能被竊取、篡改和偽造,信息的安全性和可靠性因此會(huì)大大的降低,所以?xún)?nèi)網(wǎng)、專(zhuān)網(wǎng)還是不可缺少的。在通信工具上,我們習(xí)慣了通過(guò)類(lèi)似于 ,MSN之類(lèi)的程序軟件和天南地北的朋友聊天、

17、發(fā)信息,不過(guò)所有聊天程序都需要Internet的支持,因此它們無(wú)法在局域網(wǎng)內(nèi)部大顯身手,那么是否想到過(guò)要讓單位內(nèi)部的員工,寢室周?chē)耐瑢W(xué),不用上Internet就可以輕松體驗(yàn)到內(nèi)網(wǎng)通訊的樂(lè)趣呢?有了這種想法,本課題的研究?jī)?nèi)容開(kāi)發(fā)局域網(wǎng)通信軟件就有了必要性,讓單位員工或者寢室同學(xué)不出內(nèi)網(wǎng)就能自由通信。企業(yè)內(nèi)部通信軟件是一個(gè)即時(shí)通信工具。因此,通過(guò)該軟件的設(shè)計(jì)和開(kāi)發(fā),可以對(duì)自己所學(xué)習(xí)的知識(shí)進(jìn)展了一次綜合提高,并且會(huì)有更深層次的理解和掌握,在這個(gè)過(guò)程中,還能激發(fā)自己的學(xué)習(xí)潛力,提高軟件開(kāi)發(fā)的能力,加深對(duì)網(wǎng)絡(luò)協(xié)議和Windows環(huán)境下網(wǎng)絡(luò)編程的理解和掌握,所以,開(kāi)發(fā)企業(yè)內(nèi)部通信軟件在理論和實(shí)踐上都有非

18、常重要的意義。第2章相關(guān)技術(shù)概述2.1 開(kāi)發(fā)環(huán)境本節(jié)主要介紹本軟件系統(tǒng)的開(kāi)發(fā)環(huán)境,以與運(yùn)用的編程工具等。2.1.1 開(kāi)發(fā)工具簡(jiǎn)介本系統(tǒng)采用Windows 7中文操作系統(tǒng),包含Windows API的支持,使用面向?qū)ο蟮木幊坦ぞ遃isual C+ 6.0進(jìn)展項(xiàng)目開(kāi)發(fā)。他是一款面向?qū)ο蟮墓δ軓?qiáng)大的可視化編程開(kāi)發(fā)工具。使用Vissual C+可以完成任何C語(yǔ)言和C+語(yǔ)言的程序。其中的MFC庫(kù)集成了Windows Sockets API應(yīng)用程序接口,使得用戶可以用面向?qū)ο蟮姆椒ㄖ苯诱{(diào)用。AppWizard可以用來(lái)生成初步的框架文件,資源編輯器用于幫助直觀地設(shè)計(jì)用戶接口,CLassWizard用來(lái)協(xié)助添

19、加代碼到框架文件,并且提供文檔/視圖結(jié)構(gòu)支持,從而使用應(yīng)用程序開(kāi)發(fā)變得輕松。2.1.2 Visual C+ MFC概述MFCMicrosoft Foundation Class Library庫(kù)是Microsoft公司基于Windows的C+應(yīng)用程序編程接口,是Visual C+中編寫(xiě)Windows應(yīng)用程序的首選方法。MFC是一組C+類(lèi),這些是由常用的Windows應(yīng)用程序定制的。使用MFC,可以在任何時(shí)候調(diào)用Win32函數(shù)、最大程度地利用Windows。而且,基于MFC的程序不僅小巧而且運(yùn)行速度快,這是因?yàn)閂isual C+非常接近Windows的底層,所以編譯器所編譯出來(lái)的程序質(zhì)量相當(dāng)?shù)母?/p>

20、,從而保證了Visual C+編寫(xiě)出來(lái)的軟件產(chǎn)品擁有高效率的運(yùn)行速度。MFC中的各種類(lèi)結(jié)合起來(lái)構(gòu)成了一個(gè)應(yīng)用程序框架,它的目的就是讓程序員在此根底上來(lái)建立Windows下的應(yīng)用程序,這是一種相對(duì)SDK來(lái)事更為簡(jiǎn)單的方法。因?yàn)樵诳傮w上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過(guò)預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。 2.2 WinSock網(wǎng)絡(luò)編程Windows Sockets是從Berkeley Sockets擴(kuò)展而來(lái)的,其在繼承Berkeley Sockets的根底上,又進(jìn)展了新的擴(kuò)大。這些擴(kuò)大主要是提供了一些異步函數(shù),并增加了符合WIN

21、DOWS消息驅(qū)動(dòng)特性的網(wǎng)絡(luò)事件異步選擇機(jī)制。Windows Sockets由兩局部組成:開(kāi)發(fā)組件和運(yùn)行組件。開(kāi)發(fā)組件:Windows Sockets 實(shí)現(xiàn)文檔、應(yīng)用程序接口(API)引入庫(kù)和一些頭文件。運(yùn)行組件:Windows Sockets 應(yīng)用程序接口的動(dòng)態(tài)庫(kù)(WINSOCK.DLL)。2.2.1Socket簡(jiǎn)介套接字Socket最初是由加利福尼亞大學(xué)Berkeley分校為UNIX操作系統(tǒng)開(kāi)發(fā)的網(wǎng)絡(luò)通信接口,隨著UNIX操作系統(tǒng)的廣泛使用,套接字成為當(dāng)前最流行的網(wǎng)絡(luò)通信應(yīng)用程序接口之一。90年代初,由Sun Microsystems,JSB Corporation,F(xiàn)TP software

22、,Microdyne和Microsoft等幾家公司共同制定了一套標(biāo)準(zhǔn),即Windows Sockets規(guī)X。Windows Sockets API是Microsoft Windows的網(wǎng)絡(luò)程序設(shè)計(jì)接口,它在繼承了Berkeley Sockets主要特征的根底上,又對(duì)它進(jìn)展了重要擴(kuò)大。這些擴(kuò)大主要是提供了一些異步函數(shù),并增加了符合Windows消息驅(qū)動(dòng)特性的網(wǎng)絡(luò)事件異步選擇機(jī)制。這些擴(kuò)大有利于應(yīng)用程序開(kāi)發(fā)者編制符合Windows編程模式的軟件,它使在Windows下開(kāi)發(fā)高性能的網(wǎng)絡(luò)通信程序成為可能。Socket實(shí)際上是指一個(gè)通信端點(diǎn),借助于它,用戶所開(kāi)發(fā)的Socket應(yīng)用程序,可以通過(guò)網(wǎng)絡(luò)與其它

23、Socket應(yīng)用程序進(jìn)展通信。近年來(lái),隨著計(jì)算機(jī)網(wǎng)絡(luò)與Windows 95的流行,許多用戶所開(kāi)發(fā)的應(yīng)用程序需要實(shí)現(xiàn)網(wǎng)絡(luò)間的數(shù)據(jù)通信。2.2.2開(kāi)發(fā)Windows Sockets網(wǎng)絡(luò)通信程序的軟、硬件環(huán)境所采用的操作系統(tǒng)軟件可以是Windows XP,Windows 7,因?yàn)樗鼈兌贾С諻indows Sockets API,在以下的介紹中,我們將以在Windows XP環(huán)境下的開(kāi)發(fā)為例。 所采用的編程語(yǔ)言一般可選目前較流行使用的可視化和采用面向?qū)ο蠹夹g(shù)的Microsoft Visual C+ 6.0。Visual C+ 6.0可在Windows XP或Windows 7環(huán)境下運(yùn)行,其開(kāi)發(fā)系統(tǒng)增加

24、了全面集成的基于Windows 的開(kāi)發(fā)工具以與一個(gè)基于傳統(tǒng)C/C+開(kāi)發(fā)過(guò)程的“可視化用戶界面驅(qū)動(dòng)模型。Visual C+ 6.0中的Microsoft基類(lèi)MFC,即Microsoft Foundation Class)庫(kù)是一系列C+類(lèi),其中封裝著為Microsoft Windows操作系統(tǒng)系列編寫(xiě)應(yīng)用程序的各種功能 。在有關(guān)套接字方面,Visual C+ 6.0對(duì)原來(lái)的Windows Sockets庫(kù)函數(shù)進(jìn)展了一系列封裝,繼而產(chǎn)生了CSocket 、CSocketFile等類(lèi),它們封裝著有關(guān)Socket的各種功能。 所采用的網(wǎng)絡(luò)通信協(xié)議一般是TCP / IP。Windows XP和Window

25、s 7都帶有該協(xié)議。但是,所開(kāi)發(fā)的網(wǎng)絡(luò)通信應(yīng)用程序并不能直接與TCP / IP核心打交道,而是與網(wǎng)絡(luò)應(yīng)用編程界面Windows Sockets API打交道。Windows Sockets API如此可直接與TCP/IP核心進(jìn)展溝通。TCP / IP核心協(xié)議連同網(wǎng)絡(luò)物理介質(zhì)如網(wǎng)卡一起,都是提供網(wǎng)絡(luò)應(yīng)用程序間相互通信的設(shè)施。2.2.3CSocket類(lèi)編程模型使用CSocket對(duì)象涉與CArchive和CSocketFile 類(lèi)對(duì)象。以下介紹的針對(duì)字節(jié)流型套接字的操作步驟中,只有第三步對(duì)于客戶方和服務(wù)方操作是不同的,其他步驟都一樣。 1構(gòu)造一個(gè)CSocket對(duì)象。 2使用這個(gè)對(duì)象的Create()

26、成員函數(shù)產(chǎn)生一個(gè)socket對(duì)象。在客戶方程序中,除非需要數(shù)據(jù)報(bào)套接字,Create()函數(shù)一般情況下應(yīng)該使用默認(rèn)參數(shù)。而對(duì)于服務(wù)方程序,必須在調(diào)用Create時(shí)指定一個(gè)端口。需要注意的是,Carchive類(lèi)對(duì)象不能與數(shù)據(jù)報(bào)UDP套接字一起工作,因此對(duì)于數(shù)據(jù)報(bào)套接字,CAsyncSocket和CSocket 的使用方法是一樣的。 3如果是客戶方套接字,如此調(diào)用CAsyncSocket Connect()函數(shù)與服務(wù)方套接字連接;如果是服務(wù)方套接字,如此調(diào)用CAsyncSocketListen()開(kāi)始監(jiān)聽(tīng)來(lái)自客戶方的連接請(qǐng)求,收到連接請(qǐng)求后,調(diào)用CAsyncSocketAccept()函數(shù)承受請(qǐng)求

27、,建立連接。請(qǐng)注意Accept()成員函數(shù)需要一個(gè)新的并且為空的CSocket對(duì)象作為它的參數(shù),解釋同上。 4產(chǎn)生一個(gè)CSocketFile對(duì)象,并把它與CSocket 對(duì)象關(guān)聯(lián)起來(lái)。5為接收和發(fā)送數(shù)據(jù)各產(chǎn)生一個(gè)CArchive 對(duì)象,把它們與CSocketFile對(duì)象關(guān)聯(lián)起來(lái)。切記CArchive是不能和數(shù)據(jù)報(bào)套接字一起工作的。 6使用CArchive對(duì)象的Read()、Write()等函數(shù)在客戶與服務(wù)方傳送數(shù)據(jù)。7通訊完畢后,銷(xiāo)毀CArchive、CSocketFile和CSocket對(duì)象。2.2.4用VC6.0進(jìn)展Windows Sockets程序開(kāi)發(fā)的技術(shù)要點(diǎn)1同常規(guī)編程一樣,無(wú)論服務(wù)

28、器方還是客戶方應(yīng)用程序都要進(jìn)展所謂的初始化處理,這局部工作仍可采用消息驅(qū)動(dòng)機(jī)制來(lái)先期完成。 2一般情況下,網(wǎng)絡(luò)通信程序是某應(yīng)用程序中的一模塊。在單獨(dú)調(diào)試網(wǎng)絡(luò)通信程序時(shí),要盡量與采用該通信模塊的其它應(yīng)用程序開(kāi)發(fā)者約定好,統(tǒng)一采用一種界面形式,即單文檔界面SDI、多文檔界面MDI和基于對(duì)話框界面中的一種這在使用AppWizard形成項(xiàng)目Project文件時(shí)有提示,盡管這并非必須,但可使通信模塊在移植到所需的應(yīng)用程序時(shí)省時(shí)省力,因?yàn)閂isual C+ 6.0這種可視化語(yǔ)言在給我們提供方便的同時(shí),也給我們帶來(lái)某些不便,譬如所形成的項(xiàng)目文件中的許多相關(guān)文件與所采用的界面形式密切聯(lián)系,許多消息驅(qū)動(dòng)功能,隨

29、所采用的界面形式不同而各異。 當(dāng)然,也可將通信模塊函數(shù)化,并形成一個(gè)動(dòng)態(tài)連接庫(kù)文件(DLL文件,供主程序調(diào)用。 3以通信程序作為其中一個(gè)模塊的應(yīng)用程序往往不是在等待數(shù)據(jù)發(fā)送或接收完之后再做其它工作,因而在主程序中要采用多線程Multithreaded技術(shù)。即將數(shù)據(jù)的發(fā)或收,放在一個(gè)具有一定優(yōu)先級(jí)一般宜取較高優(yōu)先級(jí)的輔助線程中,在數(shù)據(jù)發(fā)或收期間,主程序仍可進(jìn)展其它工作,譬如利用上一個(gè)周期收到的數(shù)據(jù)繪制曲線 。Visual C+ 6.0中的MFC提供了許多有關(guān)啟動(dòng)線程、管理線程、同步化線程、終止線程等功能函數(shù)。4在許多情況下,要求通信模塊應(yīng)實(shí)時(shí)地收、發(fā)數(shù)據(jù)。譬如調(diào)用之的主程序以0.5秒為一周期,在

30、這段時(shí)間內(nèi) ,要進(jìn)展如下工作:接收數(shù)據(jù),利用收到的數(shù)據(jù)進(jìn)展運(yùn)算,將運(yùn)算結(jié)果發(fā)送到其它計(jì)算機(jī)節(jié)點(diǎn),周而復(fù)始。我們?cè)诔浞掷肳indows Sockets的基于消息的網(wǎng)絡(luò)事件異步選擇機(jī)制,用消息來(lái)驅(qū)動(dòng)數(shù)據(jù)的發(fā)送和接收的根底上,結(jié)合使用其他措施,如將數(shù)據(jù)的收和發(fā)放在高優(yōu)先級(jí)線程,在軟件設(shè)計(jì)上,安排好時(shí)序,盡量防止在同一時(shí)間內(nèi),雙方都在向?qū)Ψ桨l(fā)送大量數(shù)據(jù)的情況發(fā)生,保證網(wǎng)絡(luò)要有足夠的帶寬等,成功地實(shí)現(xiàn)了數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性。2.3 TCP/IP協(xié)議概述TCP/IP協(xié)議Transfer Control Protocol/Internet Protocol指?jìng)鬏斂刂?網(wǎng)絡(luò)協(xié)議,又叫網(wǎng)絡(luò)通訊協(xié)議。這個(gè)協(xié)議作為網(wǎng)

31、絡(luò)中使用的根本協(xié)議,是Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的根底。TCP/IP協(xié)議是包括上百個(gè)協(xié)議,其中包括很多功能:TCPTransfer Control Protocol傳輸控制協(xié)議,IPInternet Protocol互聯(lián)網(wǎng)協(xié)議,UDPUser Datagram Protocol用戶數(shù)據(jù)報(bào)協(xié)議,ICMPInternet Control Message Protocol互聯(lián)網(wǎng)控制信息協(xié)議,F(xiàn)TPFile Transfer Protocol文件傳輸協(xié)議,SMTPSimle Mail Transfer Protocol簡(jiǎn)單傳輸協(xié)議,SNMPsimle Network Manage Protocol簡(jiǎn)

32、單網(wǎng)絡(luò)管理協(xié)議,ARPAddress Resolution Protocol地址解析協(xié)議等。從分層模型方面來(lái)講,TCP/IP由四個(gè)層次組成:鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層。每一層負(fù)責(zé)不同的功能:1鏈路層,通常包括操作系統(tǒng)中的設(shè)備驅(qū)動(dòng)程序和計(jì)算機(jī)中對(duì)應(yīng)的網(wǎng)絡(luò)接口。用于處理與電纜等其他任何傳輸媒介的物理接口細(xì)節(jié)。2網(wǎng)絡(luò)層,即互聯(lián)網(wǎng)層,通常處理分組網(wǎng)絡(luò)中的活動(dòng),例如分組的路由選擇。網(wǎng)絡(luò)層協(xié)議包括IP協(xié)議網(wǎng)際協(xié)議,ICMP協(xié)議Internet互聯(lián)網(wǎng)控制報(bào)文協(xié)議,以與IGMP協(xié)議Internet組管理協(xié)議。3運(yùn)輸層,為兩臺(tái)主機(jī)上的應(yīng)用程序提供點(diǎn)對(duì)點(diǎn)活端到端的通信。在TCP/IP協(xié)議組件中,有兩個(gè)互不一樣

33、的傳輸協(xié)議:TCP傳輸控制協(xié)議和UDP用戶數(shù)據(jù)報(bào)協(xié)議。TCP為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信。由于運(yùn)輸層提供了高可靠性的端到端的通信,因此應(yīng)用層可以忽略所有這些細(xì)節(jié)。而UDP如此為應(yīng)用層來(lái)提供。4應(yīng)用層,負(fù)責(zé)處理特定的程序細(xì)節(jié)。幾乎各種不同的TCP/IP實(shí)現(xiàn)都會(huì)提供下面這些通用的應(yīng)用程序。l Telnet遠(yuǎn)程登錄l FTP文件傳輸協(xié)議l SMTP簡(jiǎn)單傳輸協(xié)議l SNMP簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議第3章 軟件需求分析3.1需求分析3.1.1功能需求分析1用戶端的根本聊天信息發(fā)送,這些根本聊天信息包括文本和圖片。文本和圖片聊天是聊天軟件最根底的功能。用戶通過(guò)輸入IP來(lái)查找用戶,并申請(qǐng)加為好友,在對(duì)方同意加為

34、好友后,在線用戶列表就會(huì)更新用戶,把參加的用戶添加到用戶列表中。這樣,兩個(gè)用戶之前就可以實(shí)現(xiàn)通信了。在信息傳輸中,預(yù)計(jì)利用TCP/IP協(xié)議中的UDP協(xié)議,這是面向無(wú)連接的協(xié)議,但發(fā)送速度快,用于聊天信息傳輸用適合。2用戶端文件傳輸?shù)墓δ?,用戶之間可以斷點(diǎn)續(xù)傳文件。在傳文件之前,首先創(chuàng)建一信息文件,記錄文件傳送的一些信息,并根據(jù)傳輸?shù)臄?shù)據(jù)量實(shí)時(shí)修改。如果沒(méi)有傳完,下次就可以繼續(xù)打開(kāi)這個(gè)信息文件,接著上次的進(jìn)度傳輸。因?yàn)槲募鬏斎胍髷?shù)據(jù)不能出錯(cuò),因此此模塊采用TCP協(xié)議。3用戶端之間白板和聊天室的功能,這個(gè)功能有些類(lèi)似遠(yuǎn)程會(huì)議內(nèi)容的傳輸,研究目的是為了滿足企業(yè)內(nèi)部隨時(shí)性小會(huì)議室的要求。通過(guò)聊天室

35、滿足交流討論,通過(guò)白板讓發(fā)起者將想要表達(dá)的內(nèi)容,清楚的給目標(biāo)對(duì)象呈現(xiàn)出來(lái)。4用戶之間后臺(tái)的連接,每個(gè)用戶隔指定一段時(shí)間會(huì)向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線,如果不在線,就更新用戶列表,刪除用戶。3.1.2數(shù)據(jù)需求分析1客戶端之間聊天信息。在控件上顯示時(shí)格式化,更易于用戶的查看自己發(fā)送或接收到的信息。2在線用戶列表信息。服務(wù)器端存放在適當(dāng)?shù)目臻g中,在發(fā)送給客戶端時(shí),對(duì)信息列表進(jìn)展格式化,便于客戶端提取信息。3客戶端向服務(wù)器端發(fā)送確實(shí)認(rèn)在線信息。包括客戶端剛剛啟動(dòng)時(shí)的初始化信息和在使用過(guò)程中確實(shí)認(rèn)在線信息。4其它程序內(nèi)部可能需要設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)體。3.1.3性能需求分析1可靠性高,能在

36、由于系統(tǒng)問(wèn)題或其它原因產(chǎn)生錯(cuò)誤后,作出相對(duì)應(yīng)處理,比如網(wǎng)絡(luò)初始化失敗、服務(wù)器不在線等,可以提示用戶安全退出本程序,在出現(xiàn)不可知的錯(cuò)誤以后,可以盡量安全的退出程序。在程序的設(shè)計(jì)過(guò)程中,要求能盡可能多的設(shè)想到用戶使用過(guò)程中可能發(fā)生的事件,并能在判斷事件后做出相應(yīng)的處理,使程序具有較高的容錯(cuò)性能。2宜操作性,程序簡(jiǎn)單易懂,容易上手使用。設(shè)計(jì)界面是,簡(jiǎn)化界面的復(fù)雜性,模擬 等現(xiàn)有即時(shí)通訊工具的界面,使用戶能很容易看懂并使用。3開(kāi)發(fā)文檔易理解,保證以后自己二次開(kāi)發(fā)或他人接手開(kāi)發(fā)時(shí),能夠清晰的理解整個(gè)系統(tǒng)的設(shè)計(jì)思路和實(shí)現(xiàn)細(xì)節(jié)。4模塊化設(shè)計(jì)此軟件的功能,不同的模塊實(shí)現(xiàn)不同的功能,使得軟件易于以后的維護(hù)與擴(kuò)展

37、,在以后可以更好的完善本軟件的功能,更方便于在工作中的應(yīng)用。3.1.4運(yùn)行需求分析1用戶界面程序較小,啟動(dòng)速度快,無(wú)啟動(dòng)界面。在本地局域網(wǎng)中使用,所以無(wú)需進(jìn)展用戶登錄,無(wú)需認(rèn)證界面,啟動(dòng)后的應(yīng)用界面要清爽,設(shè)計(jì)要簡(jiǎn)單明了,要具有較高的易用性。2故障處理在遇到可預(yù)知的故障與情況時(shí),能提示用戶并自動(dòng)退出;在遇到不可預(yù)知的故障時(shí)能安全退出。3.2 可行性分析軟件可行性分析最根本的任務(wù)是對(duì)以后的行動(dòng)方針提出建議。如果問(wèn)題沒(méi)有可行的解釋?zhuān)治鰡T應(yīng)該建議停止這項(xiàng)開(kāi)發(fā)工程,以防止時(shí)間、資源、人力和金錢(qián)的浪費(fèi)。3.2.1 經(jīng)濟(jì)可行性分析由于本軟件的主要背景是畢業(yè)課程設(shè)計(jì),不注重直接的經(jīng)濟(jì)效益和其后的開(kāi)展方向,

38、注重的是自身水平和能力的提高。而且對(duì)自身的經(jīng)濟(jì)要求也不高,只要有一臺(tái)到兩臺(tái)可開(kāi)發(fā)程序軟件的電腦便可,所以不用考慮到經(jīng)濟(jì)問(wèn)題。3.2.2 技術(shù)可行性分析首先我已經(jīng)搭建好開(kāi)發(fā)所需要的軟硬件平臺(tái),并進(jìn)展了合理而完善的需求分析,做好了充分的前期準(zhǔn)備工作,其次因?yàn)楸境绦虻钠脚_(tái)將基于WINDOWS,將要使用網(wǎng)絡(luò)通信技術(shù),而WINDOWS有完善成熟的網(wǎng)絡(luò)通信接口,以與與VC+6.0開(kāi)發(fā)環(huán)境的嚴(yán)密契合能力,加之相類(lèi)似的更大規(guī)模的INTERNET通信工具產(chǎn)品也已有例在先,所以這個(gè)程序的開(kāi)發(fā)可行性在技術(shù)上是完全可行的。3.2.3 運(yùn)行可行性分析本軟件為一個(gè)小型的基于局域網(wǎng)的通信軟件,所消耗的資源是非常小的,現(xiàn)在一

39、般的電腦無(wú)論是硬件還是軟件都能夠滿足條件,因此,本軟件在運(yùn)行上是可行的。第4章軟件系統(tǒng)設(shè)計(jì)本章將從兩個(gè)方面介紹本系統(tǒng)的設(shè)計(jì)。第一,介紹本軟件的概要設(shè)計(jì)。第二,介紹本軟件的詳細(xì)設(shè)計(jì)。詳細(xì)設(shè)計(jì)是先從根本框架的設(shè)計(jì)出發(fā),然后逐步介紹好友管理模塊、聊天模塊、聊天室模塊、傳送文件模塊、白板模塊。所以本章是本論文的重點(diǎn)。4.1概要設(shè)計(jì)根據(jù)以上的軟件需求分析,可對(duì)本軟件進(jìn)展如下的功能模塊劃分,總體功能如圖4-1所示??傮w功能傳輸文件白板聊天室發(fā)送根本聊天信息保持連接發(fā)送圖片信息發(fā)送文本信息圖4-1總體功能框圖本軟件的總體功能主要?jiǎng)澐譃槲鍌€(gè)模塊:(1) 根本聊天模塊:兩個(gè)用戶端的根本聊天信息發(fā)送,這些根本聊天

40、信息包括文本和圖片。本模塊目的是為兩個(gè)用戶提供根本的聊天環(huán)境。(2) 聊天室模塊:多個(gè)用戶端的根本聊天信息的發(fā)送,聊天信息只能是文本信息。本模塊目的是為多個(gè)用戶提供根本的聊天環(huán)境。(3) 白板模塊:多個(gè)用戶端之間的白板信息傳送。這個(gè)白板就是一個(gè)畫(huà)板,多個(gè)用戶建立連接之后,可通過(guò)此白板模塊達(dá)到信息共享的目的。建立連接的多個(gè)用戶都在看同一塊白板,在上面畫(huà)的圖、寫(xiě)的內(nèi)容,都可以馬上會(huì)呈現(xiàn)給其他用戶。(4) 傳輸文件模塊:用戶端文件傳輸?shù)墓δ?,使用戶之間可以進(jìn)展文件傳輸。本文件傳輸功能用可以支持?jǐn)帱c(diǎn)續(xù)傳文件。5用戶之間后臺(tái)的連接,每個(gè)用戶隔指定一段時(shí)間會(huì)向用戶列表中的每一用戶發(fā)送消息,查看用戶是否在線

41、,如果不在線,就更新用戶列表,刪除用戶。4.2根本框架設(shè)計(jì)本節(jié)內(nèi)容將介紹本軟件的根本框架設(shè)計(jì),包括宏和數(shù)據(jù)結(jié)構(gòu)的定義、程序的配置文件、調(diào)試模塊、主頁(yè)面初始化相關(guān)內(nèi)容、主頁(yè)面的布局以與其自會(huì)按鈕和自繪好友列表等根本框架相關(guān)內(nèi)容。4.2.1宏和數(shù)據(jù)結(jié)構(gòu)的定義程序中用到了很多宏和數(shù)據(jù)結(jié)構(gòu),這些宏和數(shù)據(jù)結(jié)構(gòu)在多個(gè)模塊中都有用到,因此程序中專(zhuān)門(mén)新建一個(gè)頭文件Global.h,此頭文件里是程序中很多的宏和數(shù)據(jù)結(jié)構(gòu)的定義。在StdAfx.h文件包含Global.h,在程序其他地方都可以使用Global.h中的宏和定義的數(shù)據(jù)結(jié)構(gòu)。這樣處理還有一個(gè)好處,如果需要修改某些宏的值,可以直接在Global.h中修改,

42、而不用到處去找宏的定義,方便和快捷。4.2.2程序配置文件程序中很多信息需要保存,比如用戶名和熱鍵,因些程序用到了配置文件,默認(rèn)的配置文件名為conf.ini。程序用讀取和寫(xiě)入配置文件系列函數(shù)來(lái)管理此配置文件。4.2.3調(diào)試模塊為了方便調(diào)試,在程序中添加了一個(gè)用于調(diào)試的類(lèi)CDebug,它具有的成員變量和成員函數(shù)如下:class CDebug private:CStringm_strMessage;/ 信息public:CDebug();CDebug( CString strMessage );virtual CDebug();期中構(gòu)造和析構(gòu)函數(shù)如下:CDebug:CDebug( CString

43、 strMessage )m_strMessage = strMessage;CString strTrace;strTrace = run in : + m_strMessage + n;TRACE( strTrace );CDebug:CDebug()CString strTrace;strTrace = run out : + m_strMessage + n;TRACE( strTrace );利用類(lèi)的構(gòu)造、析構(gòu)函數(shù)和類(lèi)的生命周期,我們可以很方便的設(shè)計(jì)如上的CDebug類(lèi),用法如下:CDebug debug( “test );在函數(shù)或語(yǔ)句組的開(kāi)始處定義一個(gè)CDebug變量,當(dāng)程序運(yùn)行到

44、變量定義處的時(shí)候,會(huì)打印出run in : test,當(dāng)程序執(zhí)行完函數(shù)或語(yǔ)句組時(shí),會(huì)打印出run out : test,這樣我們就可以知道程序運(yùn)行到何處,極大的方便了我們對(duì)程序的調(diào)試。4.2.4主界面初始化用過(guò) 的人都知道, 主面板總是處于其他程序的上面,而且 在任務(wù)欄沒(méi)有圖標(biāo),而是把圖標(biāo)放到了托盤(pán)區(qū),另外,我們還可以按Ctrl+Alt+Z默認(rèn)的快捷鍵隱藏和顯示 主面板。不但 是這樣處理的,很多聊天軟件都采用此種處理方式。本設(shè)計(jì)也不例外,同樣也要達(dá)到這樣的目的。下面從各個(gè)方面來(lái)說(shuō)明本設(shè)計(jì)的處理方式:1不在任務(wù)欄顯示圖標(biāo)CDialog dlgParent;dlgParent.Create( ID

45、D_DIALOG_BG );dlgParent.ShowWindow( SW_HIDE );CInstantMessagingDlg dlg( &dlgParent );m_pMainWnd = &dlg;ModifyStyleEx( WS_EX_APPWINDOW, 0 );上面代碼就達(dá)到了使程序主界面不在任務(wù)欄中顯示的目的。首先,我們創(chuàng)建一個(gè)對(duì)話框,并隱藏此對(duì)放框,然后把這個(gè)對(duì)話框作為主界面對(duì)話框的父窗口,然后在主界面對(duì)話框的初始化函數(shù)中修改其風(fēng)格,去掉WS_EX_APPWINDOW風(fēng)格。這樣,主界面就不會(huì)出現(xiàn)在任務(wù)欄里面了。2將主界面放在最上層將程序放到頂層,很多程序都有這功能,比如金山

46、詞霸等,實(shí)現(xiàn)起來(lái)其實(shí)很簡(jiǎn)單,只用一條語(yǔ)句就可以達(dá)到目的:SetWindowPos( &wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );第一個(gè)參數(shù)就是將程序放到所有非頂層窗口的頂層,如果有多個(gè)程序都是頂層窗口,那么他們誰(shuí)在上面,就要看當(dāng)前誰(shuí)是激活的窗口。最后一個(gè)參數(shù),是用位或組后起來(lái)的,從字面意思上我們就能理解到這是不移動(dòng)不改變大小的意思,忽略了當(dāng)中的4個(gè)參數(shù)。3熱鍵的處理設(shè)計(jì)中默認(rèn)的熱鍵是Ctrl+Alt+Z,當(dāng)然程序允許用戶自己定義熱鍵,自定義的熱鍵將保存在conf.ini文件中。熱鍵的功能可以隱藏、顯示主界面,有消息到達(dá)時(shí),按熱鍵也可以打

47、開(kāi)聊天對(duì)話框。:RegisterHotKey( m_hWnd, IDHOTKEY, m_wModifiers, m_wVirtualKeyCode );使用全局函數(shù)RegisterHotKey可以注冊(cè)熱鍵,如果注冊(cè)的熱鍵沒(méi)有被其他程序占用,那么注冊(cè)成功。注冊(cè)成功后,如果按熱鍵,那么程序就會(huì)承受到WM_HOTKEY消息,因此我們還需要自己處理WM_HOTKEY消息:void OnHotkey( WPARAM wParam, LPARAM lParam );BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog)ON_MESSAGE( WM_HOTKEY,

48、OnHotkey )/AFX_MSG_MAPEND_MESSAGE_MAP()在消息映射中,我們用OnHotkey()函數(shù)來(lái)處理WM_HOTKEY消息。void CInstantMessagingDlg:OnHotkey( WPARAM wParam, LPARAM lParam )if( this-IsWindowVisible() )ShowWindow( SW_HIDE );elseShowWindow( SW_SHOW );:SetForegroundWindow( m_hWnd );在OnHotkey()函數(shù)中判斷主界面是否是可見(jiàn)的,如果是可見(jiàn)的那么隱藏起來(lái),否如此顯示,并且把主界面

49、設(shè)為前景窗口。4最小化和關(guān)閉按鈕的處理我們希望單擊程序右上角的最小化按鈕時(shí),程序隱藏起來(lái),而單擊關(guān)閉按鈕時(shí),程序會(huì)提示是否退出,而不會(huì)悄無(wú)聲息的退出。void CInstantMessagingDlg:OnSysmand(UINT nID, LPARAM lParam)if( nID = SC_MINIMIZE )this-ShowWindow( SW_HIDE);elseCDialog:OnSysmand(nID, lParam);void CInstantMessagingDlg:OnCancel() if( IDOK = MessageBox( 要退出嗎?, 退出, MB_OKCANCE

50、L | MB_ICONINFORMATION | MB_DEFBUTTON2 ) )DestroyWindow();在程序中處理OnSysmand()函數(shù)和OnCancel ()函數(shù)就實(shí)現(xiàn)了我們要的功能。5托盤(pán)圖標(biāo)的顯示至此,程序已不在任務(wù)欄顯示圖標(biāo),已是最頂層窗口,而且也已有熱鍵功能,但是還沒(méi)有實(shí)現(xiàn)托盤(pán)圖標(biāo)的顯示。實(shí)現(xiàn)托盤(pán)圖標(biāo)的代碼如下:NOTIFYICONDATAm_nid;HICON hIcon= AfxGetApp()-LoadIcon(STATE_ONLINE );m_nid.hIcon= hIcon;m_nid.hWnd= m_hWnd;m_nid.cbSize= sizeof(

51、NOTIFYICONDATA );m_nid.uCallbackMessage= WM_SHELLNOTIFY;m_nid.uFlags= NIF_ICON | NIF_MESSAGE | NIF_TIP;m_nid.uID= IDR_MENU1;sprintf( m_nid.szTip, 即時(shí)聊天軟件 );Shell_NotifyIcon( NIM_ADD, &m_nid );這樣我們就在托盤(pán)區(qū)顯示了STATE_ONLINE的圖標(biāo),把鼠標(biāo)移動(dòng)到圖標(biāo)上一會(huì),還會(huì)出現(xiàn)“即時(shí)聊天軟件的提示框。如果你們對(duì)圖標(biāo)有單擊和雙擊等操作,程序會(huì)收到WM_SHELLNOTIFY消息,因此,我們還必須處理WM_S

52、HELLNOTIFY消息。void OnShellNotifyProc( WPARAM wParam, LPARAM lParam );BEGIN_MESSAGE_MAP(CInstantMessagingDlg, CDialog)/AFX_MSG_MAP(CInstantMessagingDlg)ON_MESSAGE( WM_SHELLNOTIFY, OnShellNotifyProc )/AFX_MSG_MAPEND_MESSAGE_MAP()void CInstantMessagingDlg:OnShellNotifyProc( WPARAM wParam, LPARAM lParam

53、)if( lParam = WM_LBUTTONDBLCLK )else if( lParam = WM_RBUTTONUP )與熱鍵處理一樣,OnShellNotifyProc()函數(shù)響應(yīng)我們對(duì)圖標(biāo)的操作,其中l(wèi)Param參數(shù)表示消息號(hào),在本設(shè)計(jì)中只處理左鍵雙擊顯示主界面和右鍵單擊彈出菜單。在托盤(pán)添加圖標(biāo),退出程序前,如果沒(méi)有從托盤(pán)刪除圖標(biāo),那么托盤(pán)區(qū)的圖標(biāo)會(huì)一直保存下來(lái),直到鼠標(biāo)移過(guò)托盤(pán)區(qū)引起托盤(pán)區(qū)的重繪,這當(dāng)然不是我們所希望的結(jié)果。void CInstantMessagingDlg:OnDestroy() / 刪除在托盤(pán)建立的圖標(biāo):Shell_NotifyIcon( NIM_DELETE

54、, &m_nid );CDialog:OnDestroy();以上代碼在程序退出時(shí)調(diào)用,從托盤(pán)從刪除圖標(biāo)。6只允許運(yùn)行唯一實(shí)例這點(diǎn)與 不同,在一臺(tái)機(jī)子上可以運(yùn)行多個(gè) ,但本程序只允許運(yùn)行一個(gè)實(shí)例。只允許運(yùn)行一個(gè)實(shí)例,有多種方法,本設(shè)計(jì)采用的是創(chuàng)建命名事件的方法:HANDLE hEvent = :CreateEvent( NULL, FALSE, FALSE, InstantMessaging );if( hEvent )if( ERROR_ALREADY_EXISTS = GetLastError() )return FALSE;事件與普通變量不一樣,普通變量只在運(yùn)行的當(dāng)前程序中有效,而事件在

55、整個(gè)系統(tǒng)中都有效。當(dāng)首次運(yùn)行程序時(shí),會(huì)創(chuàng)建一個(gè)名為“InstantMessaging的事件,這個(gè)事件在系統(tǒng)X圍內(nèi)有效,當(dāng)再次運(yùn)行程序時(shí),程序會(huì)嘗試著創(chuàng)建同名的事件,因?yàn)橹耙呀?jīng)創(chuàng)建了這個(gè)事件,因此系統(tǒng)會(huì)返回之前創(chuàng)建事件的句柄,但GetLastError()會(huì)返回ERROR_ALREADY_EXISTS,明確需創(chuàng)建的事件之前已經(jīng)創(chuàng)建,為了保證只允許一個(gè)實(shí)例,這個(gè)實(shí)例就不再允許運(yùn)行,直接返回,退出程序。4.2.5主界面布局程序主界面如圖4-1所示。圖4-1主界面左上角顯示的是自己的頭像、狀態(tài)和昵稱(chēng);右上角的列表框是查找IP輸入框,下面是添加按鈕;在下面一點(diǎn)的列表框是自己的址列表框,顯示了自己的所有

56、IP;主界面中央是用戶列表框;最下面是4個(gè)功能按鈕。用戶列表框是一列一列的顯示添加的好友,最左邊是好友的頭像;中部上邊是好友的昵稱(chēng),下面是好友的IP;右下角是刪除好友按鈕和攝像頭按鈕,當(dāng)然好友必須有攝像頭才會(huì)顯示攝像頭按鈕。有兩種方式添加聯(lián)系人:1在右上解的查找IP輸入框里輸入IP,然后單擊下面的添加按鈕。也可以從IP輸入框里選擇以前加過(guò)的好友IP。程序允許保存10個(gè)最近聯(lián)系人的IP,當(dāng)新添加聯(lián)系人時(shí),如果已保存了10個(gè)聯(lián)系人的IP,程序會(huì)按照時(shí)間的先后順序覆蓋之前的IP。在列表框展開(kāi)下拉列表后,可以按DELETE鍵刪除選定的IP。2選定一個(gè)自己的IP,然后單擊“網(wǎng)段按鈕。此功能可以向選定IP

57、的IP段發(fā)送添加請(qǐng)求的消息,這相當(dāng)于批量添加好友的功能。在主界面任何地點(diǎn)單擊左鍵不放開(kāi),可以拖動(dòng)程序;單擊右鍵,會(huì)彈出菜單,用戶選中相應(yīng)的菜單項(xiàng),可以執(zhí)行相應(yīng)的功能;在任何地點(diǎn)雙擊左鍵,可以打開(kāi)“個(gè)人設(shè)置對(duì)話框,如圖4-2所示。圖4-2設(shè)置對(duì)話框最后一項(xiàng)“允許別人直接將我加為聯(lián)系的意思是別人添加我為好友時(shí),不會(huì)彈出請(qǐng)求對(duì)話框而直接加為好友。單擊保存后,此對(duì)話框里的內(nèi)容會(huì)保存到config.ini配置文件中。運(yùn)行程序后,會(huì)從config.ini讀取用戶信息,并在主界面中作相應(yīng)的設(shè)置。在主界面,添加、聊天室、傳送文件和白板按鈕都是自繪按鈕,可以顯示圖片,有提示能力,當(dāng)鼠標(biāo)移動(dòng)到其上一會(huì)兒后,會(huì)彈出

58、提示框,而且這些按鈕都具有XP風(fēng)格,既鼠標(biāo)滑過(guò)時(shí)會(huì)顯示不同的狀態(tài)。用戶列表框也是自繪的,普通的列表控件無(wú)法顯示我們所需的信息。自繪按鈕和自繪列表框會(huì)作為一個(gè)單獨(dú)的模塊來(lái)介紹,這兒就不作過(guò)多的介紹。4.2.6自繪按鈕VC+6.0自帶的按鈕控件不具有XP風(fēng)格,而且也不能顯示圖像,作為一款好的軟件,應(yīng)該有個(gè)好的界面。在程序的主界面上,主要的按鈕都采用了自繪按鈕,而不使用自帶的按鈕控件。AdvButton.h和AdvButton.cpp是自繪按鈕類(lèi)的頭文件和實(shí)現(xiàn)文件。在自繪按鈕類(lèi)中定義了如下成員變量:intm_nState;/ 按鈕的狀態(tài)CBitmapm_bmpNormal;/ 正常圖標(biāo)CBitmap

59、m_bmpHover;/ 焦點(diǎn)圖標(biāo)CBitmapm_bmpDown;/ 按如下圖標(biāo)CBitmapm_bmpDisable;/ 無(wú)效圖標(biāo)CToolTipCtrlm_pToolTipCtrl;/ 提示類(lèi)m_nState表示當(dāng)前按鈕的狀態(tài),可以為宏:NORMAL,HOVER,DOWN,DISABLE,分別表示按鈕正常狀態(tài)、處于焦點(diǎn)狀態(tài)、按下?tīng)顟B(tài)、無(wú)效狀態(tài),這4個(gè)宏的定義在實(shí)現(xiàn)文件。4個(gè)CBitmap的變量分別存儲(chǔ)4種狀態(tài)下的圖像。m_pToolTipCtrl是提示工具控件類(lèi),既是鼠標(biāo)在其上時(shí),會(huì)彈出提示窗口。要實(shí)現(xiàn)按鈕自繪,必須更新按鈕的風(fēng)格為自繪,可以在按鈕的屬性中更改,也可以使用代碼更改。重載P

60、reSubclassWindow(),在這個(gè)函數(shù)中更改按鈕風(fēng)格并初始化m_pToolTipCtrl。void CAdvButton:PreSubclassWindow() ModifyStyle( 0, BS_OWNERDRAW );CButton:PreSubclassWindow();m_pToolTipCtrl.Create( this, TTS_ALWAYSTIP );m_pToolTipCtrl.SetDelayTime( 100 );CString strText;GetWindowText( strText );m_pToolTipCtrl.AddTool( this, strT

61、ext ); VC+6.0中的ClassWizard不能為我們添加鼠標(biāo)離開(kāi)的消息,只能為我們添加鼠標(biāo)移動(dòng)、單擊等消息,我們得自己為自繪按鈕添加上鼠標(biāo)離開(kāi)的消息。TRACKMOUSEEVENT tme;tme.cbSize = sizeof( TRACKMOUSEEVENT );tme.hwndTrack = m_hWnd;tme.dwFlags = TME_LEAVE;:_TrackMouseEvent( &tme );以上代碼告訴系統(tǒng),當(dāng)鼠標(biāo)離開(kāi)m_hWnd窗口時(shí),向這個(gè)窗口發(fā)送一條WM_MOUSELEAVE消息。下面的處理方式與熱鍵和托盤(pán)通知消息的處理方式一樣,自定義這個(gè)消息處理函數(shù)就行了

62、。自繪按鈕必須重載DrawItem()函數(shù),在DrawItem()函數(shù)中根據(jù)m_nState的值可以貼上不同的圖,表示按鈕的一不同狀態(tài)。void CAdvButton:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) if( lpDrawItemStruct-itemState & ODS_DISABLED )m_nState = DISABLE;switch( m_nState )case NORMAL:DrawNORMAL();break;case HOVER:DrawHOVER();break;case DOWN:DrawDOWN();break;case DISABLE:DrawDISABLE();break;default:break;

展開(kāi)閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!