【正文】
市都有自己的分公司或是辦事處,有時(shí)候?qū)τ诳偣镜男畔⒒蚴桥嘤?xùn)等不能很好的實(shí)施到分公司,現(xiàn)在視頻會(huì)議系統(tǒng)的使用,跨地域的遠(yuǎn)程會(huì)議變得很容易,總公司的任何信息可通過視頻會(huì)議系統(tǒng)及時(shí)有效地傳達(dá)到分公司,總公司對(duì)分公司人員的培訓(xùn)也可以利用視頻會(huì)議系統(tǒng),視頻會(huì)議系統(tǒng)支持桌面和程序的共享,可以很好的通過視頻會(huì)議進(jìn)行產(chǎn)品培訓(xùn),技術(shù)培訓(xùn)等。 視頻會(huì)議系統(tǒng)也可實(shí)現(xiàn)與異地客戶的遠(yuǎn)程業(yè)務(wù)談判。利用這個(gè)功能就能很好的實(shí)現(xiàn)遠(yuǎn)程的業(yè)務(wù)談判。 視頻會(huì)議系統(tǒng)還可助力企業(yè)的遠(yuǎn)程銷售。視頻會(huì)議系統(tǒng)可以將產(chǎn)品和企業(yè)的介紹作為全視頻形式,這樣可以使?jié)撛诳蛻舾M(jìn)一步了解企業(yè)自身的產(chǎn)品和企業(yè)介紹,跟以前僅用圖片或文字的方式展示,更容易讓客戶接受。作為視頻會(huì)議系統(tǒng)的提供商 —— 傲群信息( Audividi),其總部位于美國(guó)加利福尼亞的 Fremont。豐富的技術(shù)積累和研發(fā)投入,使傲群( Audividi)在通信傳輸、音視頻壓縮、數(shù)據(jù)處理領(lǐng)域擁有多項(xiàng)核心專利技術(shù),具備了業(yè)界領(lǐng)先的自主研發(fā)與創(chuàng)新實(shí)力。 2020 屆本科生畢業(yè)設(shè)計(jì) 第 3 頁(yè) 2 需求分析 本軟件客戶端需要在 xp或更高版本 Windows系統(tǒng)下運(yùn)行。語(yǔ)音通信需要有麥克風(fēng),聲卡等音頻設(shè)備支持。 本軟件在 VC++,以微軟基本類庫(kù) (MFC)中基于對(duì)話框模板為基礎(chǔ);需要安裝微軟實(shí)時(shí)通信 (RTC)開發(fā)包,版本: Client API SDK;需要 socket api支持。服務(wù)器模式下,需要先連接服務(wù)器,連接成功后,即可從服務(wù)器獲得同時(shí)連接服務(wù)器的所有客戶的昵稱,點(diǎn)擊昵稱即可進(jìn)行相關(guān)通信。 即時(shí)語(yǔ)音視頻通信:在 IP模式或服務(wù)器模式下選擇通信對(duì)象,即可通過點(diǎn)擊“視頻聊天”進(jìn)行語(yǔ)音視頻通信。每個(gè)客戶端只能打開一個(gè)視頻通信過程。服務(wù)器端需要建立服務(wù),客戶端才能連接??蛻舳藙t可根據(jù)選擇進(jìn)行點(diǎn)對(duì)點(diǎn)模式或服務(wù)器模式的通信。 2020 屆本科生畢業(yè)設(shè)計(jì) 第 4 頁(yè) 3 軟件系統(tǒng)設(shè)計(jì) 相關(guān)技術(shù) ++ 基礎(chǔ) 在 VC++ 是 Microsoft 公司推出的一個(gè)基于 Windows 系統(tǒng)平臺(tái)、可視化的 集成開發(fā)環(huán)境 ,它的源程序按 C++語(yǔ)言的要求編寫,并加入了 微軟 提供的功能強(qiáng)大的MFC(Microsoft Foundation Class)類庫(kù)。 MFC 不僅給用戶提供了Windows 圖形環(huán)境下 應(yīng)用程序 的框架,而且還提供了創(chuàng)建應(yīng)用程序的 組件,這樣,開發(fā)人員不必從頭設(shè)計(jì)創(chuàng)建和管理一個(gè)標(biāo)準(zhǔn) Windows 應(yīng)用程序所需的程序,而是從一個(gè)比較高的起點(diǎn)編程,故節(jié)省了大量的時(shí)間。因此,使用 VC++提供的高度可視化的 應(yīng)用程序開發(fā) 工具和 MFC 類庫(kù),可使應(yīng)用程序開發(fā)變得簡(jiǎn)單。目前最新版本為 (截止 2020 年 11 月)。大部分類均從CObject 直接或間 接派生,只有少部分類例外。 MFC 提供了 MFC AppWizard 自動(dòng)生成框架。 此外 MFC 的部分類為 MFC/ATL 通用,可以在 Win32 應(yīng)用程序中單獨(dú)包含并使用這些類。這種想法是錯(cuò)誤的。 MFC,微軟基礎(chǔ)類 (Microsoft Foundation Classes),實(shí)際上是微軟提供的 ,用于在C++環(huán)境下編寫應(yīng)用程序的一個(gè)框架和引擎 ,VC++是 WinDOS 下開發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開發(fā)平臺(tái) ),MFC 就是掛在它之上的一個(gè)輔助軟件開發(fā)包 ,MFC作為與 VC++血肉相連的部分 (注意 C++和 VC++的區(qū)別 :C++是一種程序設(shè)計(jì)語(yǔ)言 ,是一 種大家都承認(rèn)的軟件編制的通用規(guī)范 ,而 VC++只是一個(gè)編譯器 ,或者說是一種編譯器 +源程序編輯器的 IDE,WS,PlatForm,這跟 Pascal 和Delphi的關(guān)系一個(gè)道理 ,Pascal是 Delphi的語(yǔ)言基礎(chǔ) ,Delphi使用 Pascal規(guī)范來(lái)進(jìn)行 Win下應(yīng)用程序的開發(fā)和編譯 ,卻不同于 Basic 語(yǔ)言和 VB 的關(guān)系 ,Basic 語(yǔ)言在 VB 開發(fā)出來(lái)被應(yīng)用的年代已經(jīng)成了 Basic 語(yǔ)言的新規(guī)范 ,VB 新加的 Basic 語(yǔ)言要素 ,如面向?qū)ο蟪绦蛟O(shè)計(jì)的要素 ,是一種性質(zhì)上的飛躍 ,使 VB 既是一個(gè) IDE,又成長(zhǎng)成一個(gè)新的程序 設(shè)計(jì)語(yǔ)言 ),MFC 同 BC++集成的 VCL 一樣是一個(gè)非外掛式的軟件包 ,類庫(kù) ,只不過 MFC類是微軟為 VC++專配的 .. MFC是 Win API 與 C++的結(jié)合 ,API,即微軟提供的 WinDOS下應(yīng)用程序的 編程語(yǔ)言接口 ,是一種軟件編程的規(guī)范 ,但不是一種 程序開發(fā)語(yǔ)言本身 ,可以允許用戶使用各種各樣 2020 屆本科生畢業(yè)設(shè)計(jì) 第 5 頁(yè) 的第三方 (如我是一方 ,微軟是一方 ,Borland 就是第三方 )的編程語(yǔ)言來(lái)進(jìn)行對(duì) WinDOS下應(yīng)用程序的開發(fā) , 使這些被開發(fā)出來(lái)的應(yīng)用程序能在 WinDOS 下運(yùn)行 , 比如VB,VC++,Java,Dehpi 編程語(yǔ)言函數(shù)本質(zhì)上全部源于 API,因此用它們開發(fā)出來(lái)的應(yīng)用程序都能工作在 WinOS的 消息機(jī)制 和繪圖里 ,遵守 WinDOS作為一個(gè)操作系統(tǒng)的內(nèi)部實(shí)現(xiàn) ,這其實(shí)也是一種必要 ,微軟如果不提供 API,這個(gè)世上對(duì) Win 編程的工作就不會(huì)存在 ,微軟的產(chǎn)品就會(huì)迅速?gòu)臅r(shí)尚變成垃圾 ,上面說到 MFC 是微軟對(duì) API 函數(shù)的專用 C++封裝 ,這種結(jié)合一方面讓用戶使用微軟的專業(yè) C++ SDK 來(lái)進(jìn)行 Win 下應(yīng)用程序的開發(fā)變得容易 ,因?yàn)?MFC是對(duì) API 的封裝 ,微軟做了大量的工作 ,隱藏了好多程序開發(fā)人員在 Win下用 C++ amp。 MFC 是微軟封裝了的 API。 MFC 是面向?qū)ο蟪绦蛟O(shè)計(jì)與 Application framework 的完美結(jié)合,他將傳統(tǒng)的 API 進(jìn)行了分類封裝,并且為你創(chuàng)建了程序的一般框架, MFC 是對(duì) WindowsAPI 的封裝,大大簡(jiǎn)化了我們的工作;學(xué) VC 主要就是要學(xué) MFC,大約有 100 多個(gè)類,但常用的也就二三十個(gè)。如果真的想成為高手,做個(gè)筆記本把自己認(rèn)為重要的類、函數(shù)記下來(lái),隨時(shí)學(xué)習(xí),也是很好的突擊方法。一個(gè)例外是菜單( CMenu)不是從窗口派生的。 CDocument 文檔,負(fù)責(zé)內(nèi)存數(shù)據(jù)與磁盤的交互。包括數(shù)據(jù)的顯示、用戶操作的響應(yīng)(如菜單的選取、鼠標(biāo)的響應(yīng))。另外,它通過消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。 2020 屆本科生畢業(yè)設(shè)計(jì) 第 6 頁(yè) CDC 設(shè)備文本。這圖就抽象為 CDC。把 CDC 想象成一張紙,每個(gè)窗口都有一個(gè) CDC 相聯(lián)系,負(fù)責(zé)畫窗口。 CDialog 對(duì)話框 : CWinApp 應(yīng)用程序類。最常用函數(shù) InitInstance():初始化。它們都需要在使用前選進(jìn) DC。 CFile 文件。封裝了 C 中的字符數(shù)組,非常實(shí)用。此時(shí), C++因?yàn)樗诤?API 方面的卓越表現(xiàn),剛剛 開始被用來(lái)取代 C應(yīng)用于開發(fā)商用軟件。 有趣的是, MFC 使用 “ Afx” 作為所有的全局函數(shù)的前綴, “ afx” 作為全局變量的前綴。 AFX 提供了對(duì) Windows API 的高度抽象,建立了全新的面向?qū)ο蟮?AFX API,但它對(duì)于新手來(lái)說太復(fù)雜了,所以 AFX 小組不得不重新開始。 MFC 這個(gè)名 字被采用得太晚了以至于沒來(lái)得及修改這些引用。在免費(fèi)的 Express 版本的 Visual Studio 2020/2020 中沒有包含 MFC。但最后, Borland 停止了對(duì) OWL 的繼續(xù)開發(fā)并且不久就從 Microsoft 那里購(gòu)買了 MFC 頭 文件,動(dòng)態(tài)鏈接庫(kù)等的授權(quán),微軟沒有提供完整的 MFC 的集成支持。 網(wǎng)絡(luò)編程 套接口有三種類型 :流式套接口 ,數(shù)據(jù)報(bào)套接口及原始套接口 . 流式套接口定義了一種可靠的面向連接的服務(wù) ,實(shí)現(xiàn)了無(wú)差錯(cuò)無(wú)重復(fù)的順序數(shù)據(jù)傳輸 .數(shù)據(jù)報(bào)套接口定義了一種無(wú)連接的服務(wù) ,數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸 ,是無(wú)序的 ,并且不保證可靠 ,無(wú)差錯(cuò) .原始套接口允許對(duì)低層協(xié)議如 IP 或 ICMP 直接訪問 ,主要用于新的 2020 屆本科生畢業(yè)設(shè)計(jì) 第 7 頁(yè) 網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)的測(cè)試 等 . 無(wú)連接服務(wù)器一般都是面向事務(wù)處理的,一個(gè)請(qǐng)求一個(gè)應(yīng)答就完成了客戶程序與服務(wù)程序之間的相互作用。 服務(wù)器 s oc ke t ( ) bi n d( ) r e a df r om ( ) s e n dt o( ) 阻塞,等待客戶數(shù)據(jù) 處理服務(wù)請(qǐng)求 s oc ke t ( ) bi n d( ) s e n dt o( ) r e a df r om ( ) 客戶機(jī) 服務(wù)請(qǐng)求 服務(wù)應(yīng)答 圖 3 1 無(wú)連接套接口應(yīng)用程序時(shí)序圖 c l os e ( ) c l os e ( ) 面向連接服務(wù)器處理的請(qǐng)求往往比較復(fù)雜,不是一來(lái)一去的請(qǐng)求應(yīng)答所能解決的,而且往往是并發(fā)服務(wù)器。 2020 屆本科生畢業(yè)設(shè)計(jì) 第 8 頁(yè) 服 務(wù) 器 s o c k e t ( ) b i n d ( ) l i s t e n ( )阻 塞 , 等 待 客 戶 數(shù) 據(jù)處 理 服 務(wù) 請(qǐng) 求 s o c k e t ( ) c o n n e c t ( ) w r i t e ( )客 戶 機(jī)請(qǐng) 求 數(shù) 據(jù)應(yīng) 答 數(shù) 據(jù)圖 3 2 面 向 連 接 套 接 口 應(yīng) 用 程 序 時(shí) 序 圖 r e a d ( ) r e a d ( ) a c c e p t ( ) w r i t e ( )建 立 連 接 c l o s e ( ) c l o s e ( ) 套接口工作過程如下 :服務(wù)器首先啟動(dòng) ,通過調(diào)用 socket()建立一個(gè)套接口 ,然后調(diào)用bind()將該套接口和本地網(wǎng)絡(luò)地址聯(lián)系在一起 ,再調(diào)用 listen()使套接口做好偵聽的準(zhǔn)備 ,并規(guī)定它的請(qǐng)求隊(duì)列的長(zhǎng)度 ,之后就調(diào)用 accept()來(lái)接收連接 .客戶在建立套接口后就可調(diào)用 connect()和服務(wù)器建立連接 .連接一旦建立 ,客戶機(jī)和服務(wù)器之間就可以通過調(diào)用read()和 write()來(lái)發(fā)送和接收數(shù)據(jù) .最后 ,待數(shù)據(jù)傳送結(jié)束后 ,雙方調(diào)用 close()關(guān)閉套接口。 自動(dòng)化是指應(yīng)用程序的 COM 化來(lái)讓外部可以調(diào)用它們的功能,以及外部調(diào)用這 些功能的方法。由于自動(dòng)化普遍使用 OLE的標(biāo)準(zhǔn)接口來(lái)實(shí)現(xiàn),所以這個(gè)技術(shù)有時(shí)也稱 OLE 自動(dòng)化。 COM 提供跟編程語(yǔ)言無(wú)關(guān)的方法實(shí)現(xiàn)一個(gè)軟件對(duì)象,因此可以在其他環(huán)境中運(yùn)行。 COM 并被實(shí)現(xiàn)于多個(gè)平臺(tái)之上,并不限于 Windows 操作系統(tǒng)之上。 COM 是基于組件對(duì)象方式概念來(lái)設(shè)計(jì)的,在基礎(chǔ)中,至少要讓每個(gè)組件都可以支持二個(gè)功能: 1,查詢組件中有哪些接口 2,讓組件做自我生命管理,此概念的實(shí)踐即為參考計(jì)數(shù)( Reference Counting) 這 二 個(gè) 功 能 即 為 COM 的根: IUnknown 接 口 所 提 供 的IUnknown::QueryInterface(), IUnknown::AddRef()及 IUnknown::Release()三個(gè)方法的由來(lái)。 只由 COM 派生實(shí)現(xiàn)出來(lái)的組件,稱為純 COM 組件。微軟將實(shí)現(xiàn)此接口的組件都稱為自動(dòng)化( Automation) 組件。這些性能我們可以在Windows Messenger 和其它使用實(shí)時(shí)通信 API 的應(yīng)用程序中看到。應(yīng)用程序開發(fā)人員可能想把實(shí)時(shí)通信特色整合到他們的應(yīng)用程序中去,還可以使用實(shí)時(shí)通信特性來(lái)構(gòu)建他們自己的社區(qū) 根據(jù) Microsoft Windows xp 的介紹,豐富的通信特性已經(jīng)被組合并增強(qiáng)以便在基礎(chǔ)結(jié)構(gòu)中提供為實(shí)時(shí)通信 (RTC)軟件提供支持。此外, API 也顯示出能夠在任何應(yīng)用程序中使用其豐富的通信基礎(chǔ)結(jié)構(gòu)。學(xué)習(xí) RTC 就是學(xué)習(xí)其所提供的組件和接口功能而不需要具體了解組件內(nèi)部是如何實(shí)現(xiàn)接口。主對(duì)話框類中創(chuàng)建了負(fù)責(zé)通信的 socket 相關(guān)過程和消息處理函數(shù)。主對(duì)話框類中創(chuàng)建與服務(wù)器連接所需要的 socket對(duì)象,以及進(jìn)行媒體通信所需的 RTC客戶端對(duì)象。同時(shí)在主對(duì)話框類實(shí)現(xiàn)了處理 socket事件的響應(yīng)函數(shù),和處理 RTC事件的響應(yīng)函數(shù)。 2,文字聊天,視頻聊天會(huì)話的創(chuàng)建和初始化。 4,客戶端狀態(tài)如是否連接服務(wù)器,是否已打開視頻會(huì)話等的記錄 5,主窗口顯示前會(huì)先創(chuàng)建昵稱輸入對(duì)話框來(lái)獲得用戶名 視