畢業(yè)設(shè)計(論文)網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn)_第1頁
畢業(yè)設(shè)計(論文)網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn)_第2頁
畢業(yè)設(shè)計(論文)網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn)_第3頁
畢業(yè)設(shè)計(論文)網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn)_第4頁
畢業(yè)設(shè)計(論文)網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、編號:( )字 號本科生畢業(yè)設(shè)計(論文)題目: 網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn) 姓名: 學號: 班級: 信息安全07-2班 二一一年六月本科生畢業(yè)設(shè)計姓 名: 學 號: 學 院: 計算機科學與技術(shù) 專 業(yè): 信息安全 設(shè)計題目: 網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn) 專 題: 指導教師: 職 稱: 講師 2011年 6月 徐州中國礦業(yè)大學畢業(yè)設(shè)計任務(wù)書學院 計算機 專業(yè)年級 信息安全07-2班 學生姓名 任務(wù)下達日期:2011年 1月 10日畢業(yè)設(shè)計日期: 2011年 2 月 21日 至 2011年 6 月 15日畢業(yè)設(shè)計題目:網(wǎng)絡(luò)視頻聊天軟件系統(tǒng)的設(shè)計與實現(xiàn)畢業(yè)設(shè)計專題題目:畢業(yè)設(shè)計主要內(nèi)容和

2、要求:1) 學習視頻通信,軟件開發(fā)等相關(guān)知識與技術(shù)。2) 網(wǎng)絡(luò)聊天軟件設(shè)計與分析。3) 網(wǎng)絡(luò)聊天軟件的實現(xiàn)。4) 對軟件功能,模塊進行測試,完善。5) 根據(jù)上述工作撰寫論文。院長簽字: 指導教師簽字:中國礦業(yè)大學畢業(yè)設(shè)計指導教師評閱書指導教師評語(基礎(chǔ)理論及基本技能的掌握;獨立解決實際問題的能力;研究內(nèi)容的理論依據(jù)和技術(shù)方法;取得的主要成果及創(chuàng)新點;工作態(tài)度及工作量;總體評價及建議成績;存在問題;是否同意答辯等):成 績: 指導教師簽字: 年 月 日中國礦業(yè)大學畢業(yè)設(shè)計評閱教師評閱書評閱教師評語(選題的意義;基礎(chǔ)理論及基本技能的掌握;綜合運用所學知識解決實際問題的能力;工作量的大?。蝗〉玫闹饕?/p>

3、成果及創(chuàng)新點;寫作的規(guī)范程度;總體評價及建議成績;存在問題;是否同意答辯等):成 績: 評閱教師簽字: 年 月 日中國礦業(yè)大學畢業(yè)設(shè)計答辯及綜合成績答 辯 情 況提 出 問 題回 答 問 題正 確基本正確有一般性錯誤有原則性錯誤沒有回答答辯委員會評語及建議成績:答辯委員會主任簽字: 年 月 日學院領(lǐng)導小組綜合評定成績:學院領(lǐng)導小組負責人: 年 月 日摘 要視頻通信既是最古老的通信方式,也是到目前通信界仍在不斷研究和探索的新興業(yè)務(wù)。古代的烽火狼煙可為最早的一種“視頻通信”。本文中視頻通信是指連續(xù)、動態(tài)的圖像通信。由于技術(shù)、政策、使用費用等多方面的原因,視頻通信業(yè)務(wù)在全球范圍內(nèi)并沒有大規(guī)模地使用,

4、 但人們一直沒有停止提供和使用視頻通信業(yè)務(wù)的努力。人們對視頻通信業(yè)務(wù)的需求促進與其相關(guān)的網(wǎng)絡(luò)、信息處理、網(wǎng)絡(luò)接入等技術(shù)的發(fā)展,同時這些技術(shù)的不斷發(fā)展也反過來促使視頻通信業(yè)務(wù)的不斷成熟。未來視頻通信業(yè)務(wù)將會承載于有線或無線internet上,同時其服務(wù)質(zhì)量也將會滿足商業(yè)化發(fā)展的需要。目前面臨的挑戰(zhàn)是視頻通信應(yīng)用中會涉及很多知識產(chǎn)權(quán)問題、家庭組網(wǎng)尚未形成明確的主流技術(shù),此外還有安全問題和商業(yè)模式的建立等。但我國與其他許多國家處在同一起跑線上,存在著許多創(chuàng)新的機會和領(lǐng)域。本文著重介紹以微軟實時通信(rtc)api為基礎(chǔ)的網(wǎng)絡(luò)視頻聊天軟件的設(shè)計與實現(xiàn),并進行相應(yīng)的測試與分析。關(guān)鍵字:網(wǎng)絡(luò)視頻聊天; 網(wǎng)

5、絡(luò)視頻會議; 微軟實時通信(rtc); vc+6.0;abstractvideo communication is the most ancient communication mode, is also far systems research and exploration continues the emerging business. ancient fireworks to defeat one of the earliest video communication. this paper refers to the video communication in continuous

6、 and dynamic image communication. as technology, policy, use fees and so on various reasons, video communications business globally and no large-scale land use, but people havent stopped offering and use video communications business efforts. people on the video communications business needs to prom

7、ote related network, information processing, network access technology development, at the same time these technology unceasing development in turn prompted video communications business continues to mature. future video communications business will carry on wired or wireless internet, and its servi

8、ce quality will also meet the needs of the development of commercialization. now the challenge is to video communication applications will involve a lot of intellectual property rights, family network has not yet become clear mainstream technology, in addition to security issues and business model e

9、stablishment, etc. but china and many other countries in the same starting line, there exist many innovative opportunity and fields. this paper introduce to microsoft real-time communication (rtc) api based network video chat software design and implementation, and makes the corresponding testing an

10、d analysis. keywords: network video chat; network video conference; microsoft real-time communication (rtc); vc + + 6.0; 目 錄1 緒論11.1設(shè)計背景11.2設(shè)計意義12 需求分析32.1系統(tǒng)需求32.2開發(fā)環(huán)境需求32.3技術(shù)需求32.4功能需求33 軟件系統(tǒng)設(shè)計43.1相關(guān)技術(shù)43.1.1vc+6.0基礎(chǔ)43.1.2mfc介紹43.1.3socket網(wǎng)絡(luò)編程43.1.4組件對象模型(com)43.1.5微軟實時通信(rtc)43.2軟件架構(gòu)103.3模塊分析103.3.

11、1主窗口模塊103.3.2視頻聊天對話框模塊103.3.1可連接對象模塊103.3.1文字聊天對話框模塊104 軟件系統(tǒng)實現(xiàn)124.1模塊設(shè)計124.2模塊接口124.3運行環(huán)境的介紹和配置174.4界面介紹185 軟件系統(tǒng)測試215.1服務(wù)器模式下功能測試215.2文字聊天功能測試215.3視頻聊天功能測試21結(jié)論22參考文獻23翻譯部分英文原文24中文譯文27致謝301 概述1.1設(shè)計背景隨著人們對視頻和音頻信息的需求愈來愈強烈,追求遠距離的視音頻的同步交互成為新的時尚。近些年來,依托計算機技術(shù)、通信技術(shù)和網(wǎng)絡(luò)條件的發(fā)展,集音頻、視頻、圖像、文字、數(shù)據(jù)為一體的多媒體信息,使越來越多的人開始

12、通過互聯(lián)網(wǎng)享受到網(wǎng)上生活、遠程醫(yī)療、遠程通訊的樂趣,縮短了時區(qū)和地域的距離。遠程通信的各種優(yōu)勢給人們帶來的方便也促使人們對這一領(lǐng)域進行更加深入的探索?;诓煌脚_以及不同開發(fā)工具的網(wǎng)絡(luò)視頻會議系統(tǒng)層出不窮。視頻會議系統(tǒng)在我國開始發(fā)展的初期,政府部門的應(yīng)用就占據(jù)了重要位置,覆蓋中央到直轄市和各省會城市的國家公眾視頻會議骨干網(wǎng)已經(jīng)完工。自1994年9月投入使用以來,國務(wù)院等機關(guān)先后利用該網(wǎng)召開了三百多次全國范圍的可視通訊會議。整個系統(tǒng)運行情況良好,得到了國家領(lǐng)導人和各部委領(lǐng)導的高度贊揚。近年來隨著電子政務(wù)工程的逐步推進,政府部門更加關(guān)注視頻會議系統(tǒng)建設(shè)。在經(jīng)濟發(fā)達地區(qū)(例如浙江、山東、廣東),視頻

13、會議網(wǎng)已覆蓋到地市級城市,有的甚至覆蓋到縣一級。除各級政府之外,其它諸如檢察院、法院、公安和和水利等職能部門也是視頻會議系統(tǒng)的重要用戶。視頻會議系統(tǒng)是指通過現(xiàn)有的各種電氣通訊傳輸媒體,將人物的靜態(tài)/動態(tài)圖像、語音、文字、圖片等多種信息分送到各個用戶的計算機上,使得在地理上分散的用戶可以共聚一處,通過圖形、聲音等多種方式交流信息,增加雙方對內(nèi)容的理解能力。視頻會議系統(tǒng)對于減少差旅費用等機構(gòu)開支;提高機構(gòu)運作效率;提高機構(gòu)形象有利于加強對外交往;有利于政策方針的迅速準確傳達;有利于廣泛收集意見;有利于加強內(nèi)部交流;員工培訓等方面帶來巨大的直接和間接效益。由于視頻會議系統(tǒng)的這些優(yōu)點,使得視頻會議系統(tǒng)

14、備受關(guān)注。并且已經(jīng)有越來越多的人利用這種方式進行交流溝通,不僅方便而且拉近了人與人之間的距離。現(xiàn)在的一些軟件像qq以及msn等軟件為人們的視頻聊天提供了許多方便。1.2設(shè)計意義視頻會議系統(tǒng)可開展企業(yè)間的遠程視頻會議和業(yè)務(wù)培訓?,F(xiàn)在很多公司在全國很多城市都有自己的分公司或是辦事處,有時候?qū)τ诳偣镜男畔⒒蚴桥嘤柕炔荒芎芎玫膶嵤┑椒止荆F(xiàn)在視頻會議系統(tǒng)的使用,跨地域的遠程會議變得很容易,總公司的任何信息可通過視頻會議系統(tǒng)及時有效地傳達到分公司,總公司對分公司人員的培訓也可以利用視頻會議系統(tǒng),視頻會議系統(tǒng)支持桌面和程序的共享,可以很好的通過視頻會議進行產(chǎn)品培訓,技術(shù)培訓等。在培訓的過程中,還可以用

15、視頻會議系統(tǒng)里的圖板注解、媒體共享、演示共享和文件傳輸來進行ppt,圖片,文檔,多媒體等的。視頻會議系統(tǒng)也可實現(xiàn)與異地客戶的遠程業(yè)務(wù)談判。對于異地的客戶,視頻會議系統(tǒng)可以進行音視頻的同步傳輸,加入會議的與會人員可以跟會議主席人員進行語音交流,會議主席人員可對參加會議人員提出的問題進行及時回答。利用這個功能就能很好的實現(xiàn)遠程的業(yè)務(wù)談判。利用視頻會議系統(tǒng)也可以對客戶需要的產(chǎn)品信息及技術(shù)知識,可在會議系統(tǒng)里通過ppt進行演示播放,讓客戶更清晰、明了的了解公司及產(chǎn)品信息,促進商務(wù)合作。視頻會議系統(tǒng)還可助力企業(yè)的遠程銷售。企業(yè)在利用視頻會議系統(tǒng)來進行遠程銷售時,對產(chǎn)品或公司的介紹可以全視頻播放展示。視頻

16、會議系統(tǒng)可以將產(chǎn)品和企業(yè)的介紹作為全視頻形式,這樣可以使?jié)撛诳蛻舾M一步了解企業(yè)自身的產(chǎn)品和企業(yè)介紹,跟以前僅用圖片或文字的方式展示,更容易讓客戶接受。視頻會議在各行業(yè)的廣泛應(yīng)用,使企業(yè)降低大量的成本支出,這也是很多企業(yè)愿意把視頻會議系統(tǒng)納入到企業(yè)的運營中的重要原因。作為視頻會議系統(tǒng)的提供商傲群信息(audividi),其總部位于美國加利福尼亞的fremont。公司前身(原威盛軟件)是世界上最大的獨立主機板晶片組設(shè)計公司via(威盛電子)的核心科研機構(gòu)之一,長期為via、htc、via telecom等世界知名高科技企業(yè)提供嵌入式系統(tǒng)設(shè)計和視頻通信產(chǎn)品研發(fā)。豐富的技術(shù)積累和研發(fā)投入,使傲群(a

17、udividi)在通信傳輸、音視頻壓縮、數(shù)據(jù)處理領(lǐng)域擁有多項核心專利技術(shù),具備了業(yè)界領(lǐng)先的自主研發(fā)與創(chuàng)新實力。視頻會議系統(tǒng)為企業(yè)大幅提高運作效率、降低運營成本,是企業(yè)提升核心競爭力的必需設(shè)備之一,它為企業(yè)節(jié)約了大量的會議開支和時間,提高處理事務(wù)的速度和工作效率,正逐步成為企業(yè)在信息時代溝通的新寵兒,使人們工作更快樂、更高效。2 需求分析2.1系統(tǒng)需求本軟件客戶端需要在xp或更高版本windows系統(tǒng)下運行。有局域網(wǎng)或廣域網(wǎng)連接。語音通信需要有麥克風,聲卡等音頻設(shè)備支持。進行視頻通信需要攝像頭等視頻采集設(shè)備支持。2.2開發(fā)環(huán)境需求 本軟件在vc+6.0環(huán)境下設(shè)計實現(xiàn),以微軟基本類庫(mfc)中基

18、于對話框模板為基礎(chǔ);需要安裝微軟實時通信(rtc)開發(fā)包,版本:client api v1.2 sdk;需要socket api支持。2.3技術(shù)需求1,vc+編程基礎(chǔ)2,mfc基于對話框模板的結(jié)構(gòu)與原理3,socket網(wǎng)絡(luò)編程基礎(chǔ)4,基于c/s模式的網(wǎng)絡(luò)通信原理5,微軟實時通信(rtc)開發(fā)包2.4功能需求2.4.1模式本軟件分為點對點ip模式和服務(wù)器模式,ip模式下,直接輸入通信對象的ip地址即可進行相應(yīng)語音視頻或文字通信。服務(wù)器模式下,需要先連接服務(wù)器,連接成功后,即可從服務(wù)器獲得同時連接服務(wù)器的所有客戶的昵稱,點擊昵稱即可進行相關(guān)通信。2.4.2 通信類型即時文本通信:在ip模式或服務(wù)器

19、模式下選擇通信對象,即可通過點擊“文字聊天”進行文本通信,可同時進行多個文本通信過程。即時語音視頻通信:在ip模式或服務(wù)器模式下選擇通信對象,即可通過點擊“視頻聊天”進行語音視頻通信。彈出視頻聊天對話框,大窗口顯示對方影像,右下小窗口顯示本機影像,可進行音量大小等功能的調(diào)節(jié)。每個客戶端只能打開一個視頻通信過程。2.4.2 服務(wù)器與客戶端 本軟件分為服務(wù)端與客戶端兩部分。服務(wù)器端需要建立服務(wù),客戶端才能連接。服務(wù)端可以顯示當前連接的客戶昵稱以及ip地址。客戶端則可根據(jù)選擇進行點對點模式或服務(wù)器模式的通信。進行點對點模式通信不需要連接服務(wù)器。3 軟件系統(tǒng)設(shè)計3.1相關(guān)技術(shù)3.1.1vc+6.0基礎(chǔ)

20、在vc+6.0是microsoft公司推出的一個基于windows系統(tǒng)平臺、可視化的集成開發(fā)環(huán)境,它的源程序按c+語言的要求編寫,并加入了微軟提供的功能強大的mfc(microsoft foundation class)類庫。mfc中封裝了大部分windows api函數(shù)和windows控件,它包含的功能涉及到整個windows操作系統(tǒng)。mfc不僅給用戶提供了windows圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng)用程序的組件,這樣,開發(fā)人員不必從頭設(shè)計創(chuàng)建和管理一個標準windows應(yīng)用程序所需的程序,而是從一個比較高的起點編程,故節(jié)省了大量的時間。另外,它提供了大量的代碼,指導用戶編程時

21、實現(xiàn)某些技術(shù)和功能。因此,使用vc+提供的高度可視化的應(yīng)用程序開發(fā)工具和mfc類庫,可使應(yīng)用程序開發(fā)變得簡單。3.1.2mfc介紹mfc,微軟基礎(chǔ)類(microsoft foundation classes),同vcl類似,是一種application framework,隨微軟visual c+ 開發(fā)工具發(fā)布。目前最新版本為9.0(截止2008年11月)。該類庫提供一組通用的可重用的類庫供開發(fā)人員使用。大部分類均從cobject 直接或間接派生,只有少部分類例外。 mfc 應(yīng)用程序的總體結(jié)構(gòu)通常由開發(fā)人員從mfc類派生的幾個類和一個cwinapp類對象(應(yīng)用程序?qū)ο螅┙M成。mfc 提供了mf

22、c appwizard 自動生成框架。 windows 應(yīng)用程序中,mfc 的主包含文件為afxwin.h。 此外mfc的部分類為mfc/atl 通用,可以在win32 應(yīng)用程序中單獨包含并使用這些類。 由于它的易用性,初學者常誤認為vc+開發(fā)必須使用mfc。這種想法是錯誤的。作為application framework,mfc的使用只能提高某些情況下的開發(fā)效率,只起到輔助作用,而不能替代整個win32 程序設(shè)計。 mfc,微軟基礎(chǔ)類(microsoft foundation classes),實際上是微軟提供的,用于在c+環(huán)境下編寫應(yīng)用程序的一個框架和引擎,vc+是windos下開發(fā)人員使

23、用的專業(yè)c+ sdk(sdk,standard software develop kit,專業(yè)軟件開發(fā)平臺),mfc就是掛在它之上的一個輔助軟件開發(fā)包,mfc作為與vc+血肉相連的部分(注意c+和vc+的區(qū)別:c+是一種程序設(shè)計語言,是一種大家都承認的軟件編制的通用規(guī)范,而vc+只是一個編譯器,或者說是一種編譯器+源程序編輯器的ide,ws,platform,這跟pascal和delphi的關(guān)系一個道理,pascal是delphi的語言基礎(chǔ),delphi使用pascal規(guī)范來進行win下應(yīng)用程序的開發(fā)和編譯,卻不同于basic語言和vb的關(guān)系,basic語言在vb開發(fā)出來被應(yīng)用的年代已經(jīng)成了b

24、asic語言的新規(guī)范,vb新加的basic語言要素,如面向?qū)ο蟪绦蛟O(shè)計的要素,是一種性質(zhì)上的飛躍,使vb既是一個ide,又成長成一個新的程序設(shè)計語言),mfc同bc+集成的vcl一樣是一個非外掛式的軟件包,類庫,只不過mfc類是微軟為vc+專配的. mfc是win api與c+的結(jié)合,api,即微軟提供的windos下應(yīng)用程序的編程語言接口,是一種軟件編程的規(guī)范,但不是一種程序開發(fā)語言本身,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,borland就是第三方)的編程語言來進行對windos下應(yīng)用程序的開發(fā),使這些被開發(fā)出來的應(yīng)用程序能在windos下運行,比如vb,vc+,jav

25、a,dehpi編程語言函數(shù)本質(zhì)上全部源于api,因此用它們開發(fā)出來的應(yīng)用程序都能工作在winos的消息機制和繪圖里,遵守windos作為一個操作系統(tǒng)的內(nèi)部實現(xiàn),這其實也是一種必要,微軟如果不提供api,這個世上對win編程的工作就不會存在,微軟的產(chǎn)品就會迅速從時尚變成垃圾,上面說到mfc是微軟對api函數(shù)的專用c+封裝,這種結(jié)合一方面讓用戶使用微軟的專業(yè)c+ sdk來進行win下應(yīng)用程序的開發(fā)變得容易,因為mfc是對api的封裝,微軟做了大量的工作,隱藏了好多程序開發(fā)人員在win下用c+ & mfc編制軟件時的大量內(nèi)節(jié),如應(yīng)用程序?qū)崿F(xiàn)消息的處理,設(shè)備環(huán)境繪圖,這種結(jié)合是以方便為目的的,必定要付

26、出一定代價(這是微軟的一向作風),因此就造成了mfc對類封裝中的一定程度的的冗余和迂回,但這是可以接受的. 最后要明白mfc不只是一個功能單純的界面開發(fā)系統(tǒng),它提供的類絕大部分用來進行界面開發(fā),關(guān)聯(lián)一個窗口的動作,但它提供的類中有好多類不與一個窗口關(guān)聯(lián),即類的作用不是一個界面類,不實現(xiàn)對一個窗口對象的控制(如創(chuàng)建,銷毀),而是一些在windos(用mfc編寫的程序絕大部分都在windos中運行)中實現(xiàn)內(nèi)部處理的類,如數(shù)據(jù)庫的管理類等,學習中最應(yīng)花費時間的是消息和設(shè)備環(huán)境,對c+和mfc的學習中最難的部分是指針,c+面向?qū)ο癯绦蛟O(shè)計的其它部分,如數(shù)據(jù)類型,流程控制都不難,建議學習數(shù)據(jù)結(jié)構(gòu)c+版。

27、 mfc是微軟封裝了的api。什么意思呢?windows作為一個提供功能強大的應(yīng)用程序接口編程的操作系統(tǒng),的確方便了許多程序員,傳統(tǒng)的win32開發(fā)(直接使用windows的接口函數(shù)api)對于程序員來說非常的困難,因為,api函數(shù)實在太多了,而且名稱很亂,從零構(gòu)架一個窗口動輒就是上百行的代碼。mfc是面向?qū)ο蟪绦蛟O(shè)計與application framework的完美結(jié)合,他將傳統(tǒng)的api進行了分類封裝,并且為你創(chuàng)建了程序的一般框架, mfc是對windowsapi的封裝,大大簡化了我們的工作;學vc主要就是要學mfc,大約有100多個類,但常用的也就二三十個。應(yīng)該象背4級單詞一樣將這些常用類

28、搞懂;當然不要死記,要通過看幫助、看例子、動手練習來學會它們;而且,并非每個類的內(nèi)部的所有函數(shù)都要學會,要日積月累。如果真的想成為高手,做個筆記本把自己認為重要的類、函數(shù)記下來,隨時學習,也是很好的突擊方法。 重要的mfc:cwnd:窗口,它是大多數(shù)“看得見的東西”的父類(windows里幾乎所有看得見的東西都是一個窗口,大窗口里有許多小窗口),比如視圖cview、框架窗口cframewnd、工具條ctoolbar、對話框cdialog、按鈕cbutton,etc;一個例外是菜單(cmenu)不是從窗口派生的。該類很大,一開始也不必學,知道就行了。 cdocument文檔,負責內(nèi)存數(shù)據(jù)與磁盤的

29、交互。最重要的是onopendocument(讀入),onsavedocument(寫盤),serialize(讀寫) cview視圖,負責內(nèi)存數(shù)據(jù)與用戶的交互。包括數(shù)據(jù)的顯示、用戶操作的響應(yīng)(如菜單的選取、鼠標的響應(yīng))。最重要的是ondraw(重畫窗口),通常用cwnd:invalidate()來啟動它。另外,它通過消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。你自己的許多功能都要加在里面,你打交道最多的就是它。 cdc設(shè)備文本。無論是顯示器還是打印機,都是畫圖給用戶看。這圖就抽象為cdc。cdc與其他gdi(圖形設(shè)備接口)一起,完成文字和圖形、圖像的顯示工作。把cdc想象成一張紙,每個

30、窗口都有一個cdc相聯(lián)系,負責畫窗口。cdc有個常用子類cclientdc(窗口客戶區(qū)),畫圖通常通過cclientdc完成。 cdialog對話框 :cwinapp應(yīng)用程序類。似于c中的main函數(shù),是程序執(zhí)行的入口和管理者,負責程序建立、消滅,主窗口和文檔模板的建立。最常用函數(shù)initinstance():初始化。 cgdiobject及子類,用于向設(shè)備文本畫圖。它們都需要在使用前選進dc。 cpen筆,畫線 cbrush刷子,填充 cfont字體,控制文字輸出的字體 cbitmap位圖 cpalette調(diào)色板 crgn區(qū)域,指定一塊區(qū)域可以用于做特殊處理。 cfile文件。最重要的不外是

31、open(打開),read(讀入),write(寫) cstring字符串。封裝了c中的字符數(shù)組,非常實用。 cpoint點,就是(x,y)對 crect矩形,就是(left,top,right,bottom) csize大小,就是(cx,cy)對(寬、高)mfc是在1992年的microsoft 16位版的c/c+編譯器的7.0版本中作為一個擴展輕量級的windows api面向?qū)ο蟮腸+封裝庫而引入的。此時,c+因為它在和api方面的卓越表現(xiàn),剛剛開始被用來取代c應(yīng)用于開發(fā)商用軟件。因此,他們推出了替代早期的老式的字符界面的集成開發(fā)環(huán)境(ide)的pwb。 有趣的是,mfc使用“afx”作

32、為所有的全局函數(shù)的前綴,“afx”作為全局變量的前綴。因為在mfc的早期開發(fā)階段它叫“application framework extensions”縮寫為“afx”。afx提供了對windows api的高度抽象,建立了全新的面向?qū)ο蟮腶fx api,但它對于新手來說太復雜了,所以afx小組不得不重新開始。后來他們創(chuàng)建了一組c+類,這就是mfc。mfc這個名字被采用得太晚了以至于沒來得及修改這些引用。 最近,mfc8.0和visual studio 2005一起發(fā)布了;mfc9.0和visual studio 2008一起發(fā)布。在免費的express版本的visual studio 200

33、5/2008中沒有包含mfc。 作為一個強有力的競爭對手,為borland的turbo c+編譯器設(shè)計owl(object windows library)在同一時間也發(fā)布了。但最后,borland停止了對owl的繼續(xù)開發(fā)并且不久就從microsoft那里購買了mfc頭文件,動態(tài)鏈接庫等的授權(quán),微軟沒有提供完整的mfc的集成支持。之后borland發(fā)布了vcl(visual component library)來替換owl框架。3.1.3socket網(wǎng)絡(luò)編程套接口有三種類型:流式套接口,數(shù)據(jù)報套接口及原始套接口.流式套接口定義了一種可靠的面向連接的服務(wù),實現(xiàn)了無差錯無重復的順序數(shù)據(jù)傳輸.數(shù)據(jù)報

34、套接口定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證可靠,無差錯.原始套接口允許對低層協(xié)議如ip或icmp直接訪問,主要用于新的網(wǎng)絡(luò)協(xié)議實現(xiàn)的測試等.無連接服務(wù)器一般都是面向事務(wù)處理的,一個請求一個應(yīng)答就完成了客戶程序與服務(wù)程序之間的相互作用。若使用無連接的套接口編程,程序的流程可以用圖3-1表示。面向連接服務(wù)器處理的請求往往比較復雜,不是一來一去的請求應(yīng)答所能解決的,而且往往是并發(fā)服務(wù)器。使用面向連接的套接口編程,可以通過圖3-2來表示其時序。套接口工作過程如下:服務(wù)器首先啟動,通過調(diào)用socket()建立一個套接口,然后調(diào)用bind()將該套接口和本地網(wǎng)絡(luò)地址

35、聯(lián)系在一起,再調(diào)用listen()使套接口做好偵聽的準備,并規(guī)定它的請求隊列的長度,之后就調(diào)用accept()來接收連接.客戶在建立套接口后就可調(diào)用connect()和服務(wù)器建立連接.連接一旦建立,客戶機和服務(wù)器之間就可以通過調(diào)用read()和write()來發(fā)送和接收數(shù)據(jù).最后,待數(shù)據(jù)傳送結(jié)束后,雙方調(diào)用close()關(guān)閉套接口。由于windows的基于消息的特點,winsock和bsd套接口相比,有如下一些新的擴充:1.異步選擇機制異步選擇函數(shù)wsaasyncselect()允許應(yīng)用程序提名一個或多個感興趣的網(wǎng)絡(luò)事件,如fd_read,fd_write,fd_connect,fd_acce

36、pt等等代表的網(wǎng)絡(luò)事件.當被提名的網(wǎng)絡(luò)事件發(fā)生時,windows應(yīng)用程序的窗口函數(shù)將收到一個消息.這樣就可以實現(xiàn)事件驅(qū)動了.2.異步請求函數(shù)異步請求函數(shù)允許應(yīng)用程序用異步方式獲得請求的信息,如wsaasyncgetxbyy()類函數(shù). 這些函數(shù)是對bsd標準函數(shù)的擴充.函數(shù)wsacancelasyncrequest()允許用戶中止一個正在執(zhí)行的異步請求.3.阻塞處理方法winsock提供了鉤子函數(shù)負責處理windows消息,使windows的消息循環(huán)能夠繼續(xù).winsock提供了兩個函數(shù)(wsasetblockinghook()和wsaunhookblockinghook()讓應(yīng)用程序設(shè)置或取

37、消自己的鉤子函數(shù).函數(shù)wsaisblocking()可以檢測是否阻塞,函數(shù)wsacancelblockingcall()可以取消一個阻塞的調(diào)用.4.錯誤處理winsock提供了兩個wsagetlasterror()和wsasetlasterror()來獲取和設(shè)置最近錯誤號.5.啟動和終止由于windows sockets的服務(wù)是以動態(tài)連接庫winsock.dll形式實現(xiàn)的,所以必須要先調(diào)用wsastartup()函數(shù)對windows sockets dll進行初始化,協(xié)商winsock的版本支持,并分配必要的資源.在應(yīng)用程序關(guān)閉套接口后,還應(yīng)調(diào)用wsacleanup()終止對windows s

38、ockets dll的使用,并釋放資源,以備下一次使用.3.1.4組件對象模型(com)組件對象模型,也稱組件對象模型,英文為component object model,縮寫com,是微軟對于網(wǎng)頁服務(wù)器與客戶端、增益集與office系列軟件之間交互的一項軟件組件技術(shù)。自動化是指應(yīng)用程序的com化來讓外部可以調(diào)用它們的功能,以及外部調(diào)用這些功能的方法。自動化的典型應(yīng)用是微軟的很多軟件中都支持的宏。由于自動化普遍使用ole的標準接口來實現(xiàn),所以這個技術(shù)有時也稱ole自動化。com是微軟自1993年便提出的組件式軟件平臺,用來做進程間通信(inter-process communication,

39、ipc)以及當作組件式軟件開發(fā)的平臺。com提供跟編程語言無關(guān)的方法實現(xiàn)一個軟件對象,因此可以在其他環(huán)境中運行。com要求軟件組件必須遵照一個共同的接口,該接口與實現(xiàn)無關(guān),因此可以隱藏實現(xiàn)屬性,并且被其他對象在不知道其內(nèi)部實現(xiàn)的情形下正確的使用。com并被實現(xiàn)于多個平臺之上,并不限于windows操作系統(tǒng)之上。但還是只有windows最常使用com,且某些功能已被目前的.net平臺取代。com是基于組件對象方式概念來設(shè)計的,在基礎(chǔ)中,至少要讓每個組件都可以支持二個功能:1,查詢組件中有哪些接口 2,讓組件做自我生命管理,此概念的實踐即為參考計數(shù)(reference counting) 這二個功

40、能即為com的根:iunknown接口所提供的iunknown:queryinterface(),iunknown:addref()及iunknown:release()三個方法的由來。所有的com組件都要實現(xiàn)iunknown,表示每個com組件都有相同的能力。只由com派生實現(xiàn)出來的組件,稱為純com組件。但在windows持續(xù)發(fā)展時,visual basic 4.0開始支持ocx,也就是ole custom control,這讓微軟開始思考要如何讓com組件可以跨語言支持,在這樣的要求下,必須要提供一個一致的接口,以及提供一組可以調(diào)用接口內(nèi)方法的能力,由于純com組件只能夠支持c/c+ 的

41、直接訪問,為了要達到跨語言的能力,在com中必須要支持在外部調(diào)用內(nèi)部方法的機能,這個機能造就了invoke()方法,另外為了跨語言的支持,com應(yīng)該要提供簡單的組件訪問識別方式,這也就是會有g(shù)etidsofnames()的原因,將這些方法組合起來,定義出的必要接口,稱為idispatch接口,所有實現(xiàn)此接口的,都可以支持跨語言的支持。微軟將實現(xiàn)此接口的組件都稱為自動化(automation) 組件。3.1.5微軟實時通信(rtc)開發(fā)包 軟實時通信(rtc)api是一套提供有豐富功能的核心組件。這些性能我們可以在windows messenger和其它使用實時通信api的應(yīng)用程序中看到。本文將

42、介紹由這些組件提供的多媒體支持。應(yīng)用程序開發(fā)人員可能想把實時通信特色整合到他們的應(yīng)用程序中去,還可以使用實時通信特性來構(gòu)建他們自己的社區(qū)根據(jù)microsoft windows xp的介紹,豐富的通信特性已經(jīng)被組合并增強以便在基礎(chǔ)結(jié)構(gòu)中提供為實時通信(rtc)軟件提供支持。這些特性被microsoft windows messenger用來顯示實時語音和視頻、即時消息及其他協(xié)同信息。此外,api也顯示出能夠在任何應(yīng)用程序中使用其豐富的通信基礎(chǔ)結(jié)構(gòu)。 rtc以組件對象模型(com)的方式發(fā)布,提供了一整套api供程序員建立點到點的,多點結(jié)合的多媒體通信程序。學習rtc就是學習其所提供的組件和接口功

43、能而不需要具體了解組件內(nèi)部是如何實現(xiàn)接口。3.2軟件架構(gòu)3.2.1服務(wù)端服務(wù)端比較簡單,只有主對話框。主對話框類中創(chuàng)建了負責通信的socket相關(guān)過程和消息處理函數(shù)。3.2.2客戶端客戶端在主對話框顯示前,先顯示昵稱輸入對話框,然后進入主對話框。主對話框類中創(chuàng)建與服務(wù)器連接所需要的socket對象,以及進行媒體通信所需的rtc客戶端對象。通過按鈕事件分別創(chuàng)建文本聊天對話框和視頻聊天對話框并建立相應(yīng)的會話對象進行連接。同時在主對話框類實現(xiàn)了處理socket事件的響應(yīng)函數(shù),和處理rtc事件的響應(yīng)函數(shù)。3.3模塊分析由于服務(wù)端比較簡單,因此只介紹客戶端模塊:3.3.1主窗口模塊主窗口主要負責以下幾項

44、工作:1,socket對象創(chuàng)建以及socket網(wǎng)絡(luò)連接和事件處理。2,文字聊天,視頻聊天會話的創(chuàng)建和初始化。3,rtc事件處理函數(shù)的實現(xiàn)。4,客戶端狀態(tài)如是否連接服務(wù)器,是否已打開視頻會話等的記錄5,主窗口顯示前會先創(chuàng)建昵稱輸入對話框來獲得用戶名3.3.2視頻對話框模塊對象實例由主窗口在接收到視頻連接成功消息后創(chuàng)建,為主窗口提供setinit接口完成初始化。視頻對話框主要負責視頻聊天事件如音量調(diào)節(jié),視頻窗口大小的布置等工作。且一個客戶端只能創(chuàng)建一個視頻會話。3.3.3可連接對象模塊可連接對象是com技術(shù)中處理接口事件的一種方法。本例中,可連接對象實例由主窗口創(chuàng)建,注冊到rtc客戶端,并為rtc

45、客戶端提供調(diào)用接口,當rtc客戶端有媒體通信事件后,就調(diào)用相應(yīng)的接口進行事件處理。3.3.4文字對話框模塊對象實例由主窗口在接受到文字聊天按鈕消息后創(chuàng)建,并提供相應(yīng)接口供主窗口調(diào)用來完成初始化。一個文字對話框?qū)?yīng)一個im會話,負責完成相應(yīng)的聊天工作,處理聊天消息和顯示。4 軟件系統(tǒng)實現(xiàn)4.1模塊設(shè)計4.1.1服務(wù)端設(shè)計服務(wù)端建立socket對象,建立tcp監(jiān)聽,接收客戶端的連接,并負責將客戶已連接客戶信息發(fā)送給其他客戶。void cavserverdlg:onnetevent(wparam wparam,lparam lparam)switch(lparam)case fd_accept:ac

46、cept(socket_listen,null,null);break;case fd_read:onnetread(wparam);break;case fd_write:break;case fd_close:onnetclose(wparam);shutdown(wparam,2);break;default:break;以上為socket事件處理函數(shù),根據(jù)不同的事件類型,調(diào)用相應(yīng)的2層處理函數(shù)。通信協(xié)議:規(guī)定接收的字符串第一個字符為“1”:表示用戶連接“2”:表示用戶斷開緊接著為用戶昵稱,以“”結(jié)尾。緊接著為用戶ip,同樣以“”結(jié)尾。規(guī)定發(fā)送的字符串第一個字符為“1”:表示用戶連接“2

47、”:表示用戶斷開緊接著為用戶昵稱,以“”結(jié)尾。緊接著為用戶ip,同樣以“”結(jié)尾。通信過程:用戶與服務(wù)器建立socket連接后會向服務(wù)器發(fā)送用戶信息字符串,服務(wù)器接收字符串將用戶信息顯示在主對話框。并根據(jù)當前連接用戶數(shù)目,依次發(fā)送該用戶信息,同時將其他用戶信息發(fā)送給該用戶。字符串格式按上通信協(xié)議格式化。用戶與服務(wù)器斷開過程同上。4.1.2主窗口模塊主要變量:int m_messesnum;記錄文本會話數(shù)。irtcclient * m_pclient;rtc客戶端對象。cmessagedlg m_cmdlgs10;文本聊天對話框?qū)ο蠼M。cavdlg m_avdlg;視頻聊天對話框?qū)ο?。socket

48、 m_s;socket對象。bool m_ifconnect;記錄是否連接服務(wù)器。bool m_ifavdlg;記錄是否已經(jīng)建立視頻聊天。主要函數(shù):void createmdlg(irtcsession *psession,cstring initname);創(chuàng)建文字聊天對話框。void rtceventsschange(irtcsessionstatechangeevent *pevent);會話狀態(tài)改變事件處理函數(shù)。void rtceventmessage(irtcmessagingevent *pevent);消息事件處理函數(shù)。void rtceventmedia(irtcmediaev

49、ent *pevent);媒體事件處理函數(shù)。hresult rtceventhandle(rtc_event enevent, idispatch *pdisp);事件處理總函數(shù),同時供可連接對象調(diào)用。afx_msg void onclientmsg(wparam wparam,lparam iparam);socket事件處理函數(shù)。hresult ctrydlg:rtcinit()hresult hr;m_pclient=null; hr=coinitialize(null);if(failed(hr)messagebox(com init error!);return hr;hr = co

50、createinstance (clsid_rtcclient, null,clsctx_inproc_server, iid_irtcclient,(lpvoid *)&m_pclient);if (failed(hr)messagebox(com o create error!);return hr;hr = m_pclient-initialize();if (failed(hr)/safe_release(m_pclient);messagebox(com init create error!);return hr; m_pclient-setpreferredmediatypes (

51、 rtcmt_all, variant_true );long leventmask = rtcef_session_state_change | rtcef_messaging | rtcef_media | rtcef_intensity | rtcef_client;hr=m_pclient-put_eventfilter(leventmask); if (failed(hr)messagebox(put filter error!);return hr;m_pevent=new myevent;m_pevent-advise(m_pclient,m_hwnd,this);hr=m_pc

52、lient-put_listenforincomingsessions(rtclm_both); if (failed(hr)messagebox(put listen error!);return hr;return hr;rtc環(huán)境初始化函數(shù),主要做以下工作:創(chuàng)建rtc客戶端對象并初始化,設(shè)置通信參數(shù),設(shè)置過濾事件類型,注冊可連接對象,等待連接。4.1.3文字聊天對話框模塊主要變量:int m_sesn;記錄當前文字會話編號。irtcsession *m_psession;會話對象。cstring m_myname;記錄自己昵稱。主要函數(shù):void setsesandname(irtcsession *psession,cstring myname,int sesn);傳遞會話對象,用戶名,會話編號。void setmessage(cstring message,cstring messageheader);傳遞消息。void setinituser(cstring user);初始化用戶。void setend();會話結(jié)束。4.1.4視頻聊天對話框模塊主要變量:cwnd m_pparent;父對話框指針。irtcclient *m_pparentclient;父

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論