freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于ip網(wǎng)絡(luò)公務(wù)電話(huà)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2024-07-23 21:05 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 向無(wú)連接的套接字操作,能夠更快速的傳輸數(shù)據(jù),滿(mǎn)足語(yǔ)音通信功能。另外,本次設(shè)計(jì)還定義了三個(gè)重要的結(jié)構(gòu)體:SignalPacket、NumberListNode和Numberlist。SignalPacket實(shí)現(xiàn)了對(duì)信令包的設(shè)計(jì),本次設(shè)計(jì)的所有信令都是用的這個(gè)結(jié)構(gòu)體的結(jié)構(gòu);NumberListNode和Numberlist利用了單鏈表結(jié)構(gòu)實(shí)現(xiàn)了對(duì)系統(tǒng)配置中的列表的設(shè)計(jì)。二、各個(gè)類(lèi)的基本介紹下面簡(jiǎn)要介紹一下各個(gè)類(lèi)所完成的功能:CIPPHONEDlg類(lèi):首頁(yè)的對(duì)話(huà)框類(lèi)。這是整個(gè)程序的入庫(kù)函數(shù),即程序每次從開(kāi)啟到終止時(shí)經(jīng)歷的全過(guò)程。在這個(gè)類(lèi)中我們實(shí)現(xiàn)了對(duì)每個(gè)類(lèi)的邏輯調(diào)用和各線(xiàn)程的實(shí)現(xiàn),從而完成IP公務(wù)電話(huà)的所有功能。CSysSettingDlg類(lèi):系統(tǒng)配置的對(duì)話(huà)框類(lèi)。它通過(guò)對(duì)話(huà)框,讓用戶(hù)通過(guò)控件完成對(duì)包括IP地址、公務(wù)號(hào)碼、公務(wù)編號(hào)、組號(hào)的配置。并能使用戶(hù)可以添加、修改、刪除、清空和顯示配置情況,CHistoryDlg類(lèi):通話(huà)記錄的對(duì)話(huà)框類(lèi)。它能顯示用戶(hù)通過(guò)這個(gè)軟件所進(jìn)行的通話(huà)時(shí)間、通話(huà)時(shí)長(zhǎng)以及通信對(duì)端的用戶(hù)信息等相關(guān)信息。CNumberList類(lèi):號(hào)碼列表類(lèi),負(fù)責(zé)號(hào)碼表的維護(hù)。CCaptureSound類(lèi):負(fù)責(zé)語(yǔ)音數(shù)據(jù)的采集及發(fā)送。首先創(chuàng)建并初始聲音采集設(shè)備,創(chuàng)建語(yǔ)音采集緩沖區(qū),設(shè)置緩沖區(qū)的通知位置,創(chuàng)建一個(gè)發(fā)送線(xiàn)程,把緩沖區(qū)中的語(yǔ)音數(shù)據(jù)發(fā)送到指定的用戶(hù)(單呼),或著小組中其他用戶(hù)(組呼)。CPlaySound類(lèi):負(fù)責(zé)語(yǔ)音數(shù)據(jù)的接收及播放。首先創(chuàng)建并初始化因聲音播放設(shè)備,創(chuàng)建多個(gè)聲音緩沖區(qū),創(chuàng)建一個(gè)接收線(xiàn)程,把接收到的語(yǔ)音數(shù)據(jù)存入到對(duì)應(yīng)的聲音緩沖區(qū)中,循環(huán)播放緩沖區(qū)中的語(yǔ)音數(shù)據(jù)。CManageSound類(lèi):負(fù)責(zé)管理語(yǔ)音采集和播放設(shè)備的創(chuàng)建和釋放。CSignalSerSocket類(lèi):異步套接字類(lèi),負(fù)責(zé)數(shù)據(jù)發(fā)送接收。CSignalAcpSocket類(lèi):異步套接字類(lèi),負(fù)責(zé)數(shù)據(jù)發(fā)送接收。CSignalCliSocket類(lèi):異步套接字類(lèi),負(fù)責(zé)數(shù)據(jù)發(fā)送接收。CSignalDeal類(lèi):信令處理類(lèi),負(fù)責(zé)信令處理。CSoundSocket類(lèi):負(fù)責(zé)語(yǔ)音數(shù)據(jù)的發(fā)送及接收,采用UDP方式,單呼和組呼的語(yǔ)音數(shù)據(jù)都使用這個(gè)類(lèi)來(lái)傳輸。三、類(lèi)設(shè)計(jì)圖。該圖顯示了所有類(lèi)之間的關(guān)聯(lián),以及每個(gè)類(lèi)里面一部分構(gòu)造函數(shù)、構(gòu)析函數(shù)、成員函數(shù)和成員變量。 類(lèi)圖設(shè)計(jì)第四節(jié) 信令機(jī)制設(shè)計(jì)在信令包格式中我們?cè)O(shè)計(jì)了包括標(biāo)志位、子標(biāo)志位、IP地址、掩碼、公務(wù)編碼、號(hào)碼、組號(hào)、話(huà)機(jī)狀態(tài)、緩存順序等,其中通過(guò)前兩種標(biāo)志共同完成對(duì)信令包類(lèi)型的確定,以完成話(huà)機(jī)工作下的各種信令。具體實(shí)現(xiàn)是在CsignalDeal類(lèi)中定義了SignalPacket的結(jié)構(gòu)體。 信令包格式 在信令標(biāo)志位中,我們將詳細(xì)列出標(biāo)志位所代表的各個(gè)含義,其中信令消息主要分為三類(lèi),請(qǐng)求信令、回復(fù)信令和通知信令。具體標(biāo)志位含義如下: 信令標(biāo)志標(biāo)志位標(biāo)志位類(lèi)型數(shù)值設(shè)計(jì)中規(guī)定的代表含義REQUESTINGFlag0x01通話(huà)請(qǐng)求消息REQUEST_SINGLEChilFlag0x02單呼請(qǐng)求消息REQUEST_GROUPChilFlag0x03組呼請(qǐng)求消息REQUEST_BOARDChilFlag0x04廣播請(qǐng)求消息REPLYINGFlag0x05通話(huà)回復(fù)消息REPLY_WAITTINGChilFlag0x06回復(fù)等待消息REPLY_REFUSEREQUESTChilFlag0x07回復(fù)拒絕消息NOTIFYINGFlag0x08通話(huà)告知消息NOTIFY_ACCEPTChilFlag0x09通知接收消息NOTIFY_REFUSEChilFlag0x0A通知拒絕消息NOTIFY_ENDINGChilFlag0x0B通知結(jié)束消息UPDATINGFlag0x0C通知更新消息(暫未使用)第五節(jié) 界面操作設(shè)計(jì)為了實(shí)現(xiàn)公務(wù)電話(huà)的功能以及各種功能,我設(shè)計(jì)出了三個(gè)界面來(lái)用于用戶(hù)的交互。設(shè)計(jì)如下:首先是撥號(hào)界面,也就是主界面的設(shè)計(jì):該界面分為了信息提示區(qū)、撥號(hào)鍵盤(pán)區(qū)、功能鍵盤(pán)區(qū)和本機(jī)信息區(qū)。 主界面系統(tǒng)設(shè)置界面的設(shè)計(jì): 系統(tǒng)配置界面通話(huà)記錄界面: 通話(huà)記錄界面第六節(jié) 話(huà)機(jī)狀態(tài)設(shè)計(jì)在話(huà)機(jī)狀態(tài)設(shè)計(jì)中,我們充分考慮了公務(wù)IP電話(huà)的各個(gè)狀態(tài),設(shè)計(jì)了話(huà)機(jī)的狀態(tài)標(biāo)志。在話(huà)機(jī)的工作中,通過(guò)對(duì)狀態(tài)的判斷完成對(duì)鈴音的播放和信令的處理,同時(shí)又將信令的處理結(jié)果通過(guò)話(huà)機(jī)狀態(tài)來(lái)顯示出來(lái)。在本系統(tǒng)的設(shè)計(jì)中,以下是具體的狀態(tài)設(shè)計(jì)。 狀態(tài)標(biāo)志狀態(tài)標(biāo)志標(biāo)志值設(shè)計(jì)中規(guī)定的代表含義IDLE0x01空閑狀態(tài)(掛機(jī)狀態(tài))IDLE_PHONERING0x02空閑振鈴狀態(tài)IDLE_BEFOREEND0x03空閑狀態(tài)(特定主動(dòng)掛機(jī)情形下)HOLDING0x04摘機(jī)狀態(tài)HOLDING_DIALING0x05摘機(jī)撥號(hào)狀態(tài)HOLDING_WAITING0x06摘機(jī)撥號(hào)后等待狀態(tài)HOLDING_DELAYING0x07摘機(jī)撥號(hào)延遲狀態(tài)HOLDING_BACKRING0x08摘機(jī)撥號(hào)收到回鈴音狀態(tài)HOLDING_BUSY0x09摘機(jī)撥號(hào)收到忙音狀態(tài)HOLDING_TALKING0x0A通話(huà)狀態(tài)HOLDING_TALKING_SINGLE0x0B單呼通話(huà)狀態(tài)HOLDING_TALKING_GROUP0x0C組呼通話(huà)狀態(tài)HOLDING_TALKING_BOARD0x0D廣播通話(huà)狀態(tài)HOLDING_TALKING_ENDING0x0E通話(huà)結(jié)束狀態(tài)(特定被動(dòng)話(huà)機(jī)情形下)在話(huà)機(jī)的眾多狀態(tài)中,用戶(hù)的操作可以改變當(dāng)前話(huà)機(jī)的狀態(tài),在信令的傳送和處理后都能導(dǎo)致?tīng)顟B(tài)的轉(zhuǎn)變,下面將展示狀態(tài)的轉(zhuǎn)移圖。 狀態(tài)轉(zhuǎn)移圖第七節(jié) 系統(tǒng)程序線(xiàn)程設(shè)計(jì)本系統(tǒng)設(shè)計(jì)中,我們采用了多線(xiàn)程技術(shù)對(duì)語(yǔ)音采集、語(yǔ)音播放、信令處理、鈴音播放、撥號(hào)采集、信息提示等等進(jìn)行處理,利用多個(gè)線(xiàn)程協(xié)同完成話(huà)機(jī)的各個(gè)功能。下面展示的是本系統(tǒng)的線(xiàn)程處理。 線(xiàn)程設(shè)計(jì)第八節(jié) 本章小節(jié)本章詳細(xì)介紹了本次仿真系統(tǒng)的設(shè)計(jì)思路。設(shè)計(jì)目標(biāo)是仿真一個(gè)IP公務(wù)電話(huà)系統(tǒng),其系統(tǒng)框架分為界面操作、業(yè)務(wù)邏輯、數(shù)據(jù)傳輸三層。并分析了12個(gè)類(lèi)和3個(gè)結(jié)構(gòu)體在系統(tǒng)結(jié)構(gòu)中所完成的功能,介紹了信令機(jī)制設(shè)計(jì),界面設(shè)計(jì)、話(huà)機(jī)狀態(tài)設(shè)計(jì)以及線(xiàn)程設(shè)計(jì)。第五章 IP網(wǎng)絡(luò)電話(huà)關(guān)鍵程序?qū)崿F(xiàn)第一節(jié) 用于語(yǔ)音傳輸?shù)拿嫦蚍沁B接的套接字本次設(shè)計(jì)用CSoundSocket類(lèi)來(lái)實(shí)現(xiàn)語(yǔ)音數(shù)據(jù)的傳輸,該類(lèi)是用異步套接字的方式進(jìn)行的一系列套接字操作。它完成了套接字中版本協(xié)商、套接字創(chuàng)建、綁定端口以及單呼和組呼的接收和傳輸,并且關(guān)閉套接字的操作。該類(lèi)的主要成員函數(shù)有:create(UINT LocalPort,UINT RemotePort,char * pAddr)、Bind()、JoinMulticast()、SendTo(char *pBuf,int iLen)、RecvFrom(char *pBuf,int iLen)和Close()。以下是實(shí)現(xiàn)以上函數(shù)所實(shí)現(xiàn)的功能介紹:Create(UINT LocalPort,UINT RemotePort,char * pAddr):首先進(jìn)行了版本協(xié)商,這也是最高版本,支持異步套接字的函數(shù)。然后利用WSASocket函數(shù)創(chuàng)建一個(gè)支持組播和單呼的異步套接字接口,其套接字類(lèi)型為SOCK_DGRAM,也就是說(shuō)是面向無(wú)連接的套接字。最后將本地端口、對(duì)端端口和目的IP地址用傳入的參數(shù)傳給自己的成員變量。 Bind():這是用于單呼的套接字綁定,先定義一個(gè)SOCKADDR_IN的對(duì)象sockadd,然后對(duì)里面的成員進(jìn)行賦值,最后用bind函數(shù)將套接字綁定到LocalPort端口上。 JoinMulticast():這是用于組播的套接字綁定,先定義一個(gè)SOCKADDR_IN的對(duì)象addr,然后對(duì)里面的成員進(jìn)行賦值,然后進(jìn)行了組播的設(shè)置,并且屏蔽掉本機(jī)數(shù)據(jù),最后綁定各端口的套接字。 SendTo(char *pBuf,int iLen):先重新定義一個(gè)SOCKADDR_IN的對(duì)象ADDr,然后對(duì)里面的成員進(jìn)行賦值,最后返回一個(gè)sendto函數(shù),實(shí)現(xiàn)發(fā)送數(shù)據(jù)的功能。 RecvFrom(char *pBuf,int iLen):先定義一個(gè)整型變量存放送來(lái)的SOCKADDR_IN對(duì)象的長(zhǎng)度,再定義一個(gè)SOCKADDR_IN的對(duì)象RemoteAddr,最后返回一個(gè)recvfrom函數(shù),實(shí)現(xiàn)接受數(shù)據(jù)的功能。 Close():用closesocket函數(shù)關(guān)閉所用的套接字。第二節(jié) 用于信令傳輸?shù)拿嫦蜻B接的套接字由第一章我們可以發(fā)現(xiàn),面向非連接的套接字的客戶(hù)機(jī)與服務(wù)器的流程是一樣的,所以在編寫(xiě)面向非連接的套接字時(shí),我們可以將所有客戶(hù)服務(wù)器操作用同樣的函數(shù)完成。但面向連接的套接字則比較麻煩,所以這次就采用了將客戶(hù)機(jī),服務(wù)器的程序分成不同的類(lèi)來(lái)完成:CSignalCliSocket、CSignalAcpSocket和CSignalSerSocket類(lèi)分別完成自己的功能。它們都是從CAsyncSocket類(lèi)繼承過(guò)來(lái)的。CAsyncSocket類(lèi)為我們使用Socket套接字簡(jiǎn)化了許多繁瑣的過(guò)程,大大提高了我們編程的效率。對(duì)于Socket的WSAStartup和bind的綁定,可以用create函數(shù)調(diào)用替代,IP地址類(lèi)型轉(zhuǎn)換、主機(jī)名和IP地址轉(zhuǎn)換的過(guò)程中許多復(fù)雜的變量類(lèi)型都被簡(jiǎn)化成字符串和整數(shù)操作。CAsyncSocket::Create()有一個(gè)參數(shù)指明了你想要處理哪些Socket事件,這個(gè)Socket默認(rèn)就被用作了異步方式,并且創(chuàng)建了一個(gè)CSocketWnd窗口對(duì)象,并且將這個(gè)SOCKET與該窗口對(duì)象關(guān)聯(lián),以讓該窗口對(duì)象處理來(lái)自Socket的事件(消息),然而CSocketWnd收到Socket事件之后,只是簡(jiǎn)單地回調(diào)虛函數(shù)。所以我們只需要在虛函數(shù)中添加所需的代碼。CsignalCliSocket類(lèi)CsignalCliSocket是客戶(hù)端的套接字程序,它的成員函數(shù)有OnConnect(int nErrorCode)、OnReceive(int nErrorCode)和OnClose(int nErrorCode)。OnConnect(int nErrorCode):調(diào)用了CasyncSocket的成員函數(shù)OnConnect,實(shí)現(xiàn)客戶(hù)機(jī)向服務(wù)器套接字的連接請(qǐng)求。 OnReceive(int nErrorCode):先調(diào)用了CasyncSocket的成員函數(shù)OnReceive,通知套接字緩沖中有數(shù)據(jù),再用Receive函數(shù)接收數(shù)據(jù),調(diào)用成功時(shí),返回接收到的字節(jié)數(shù)。再將數(shù)據(jù)存入SignalPacket的信令包中交給CsignalDeal類(lèi)處理。OnClose(int nErrorCode):調(diào)用了CasyncSocket的成員函數(shù)OnClose,通知該套接字連接上的對(duì)應(yīng)套接字已經(jīng)被相關(guān)進(jìn)程終止了。CSignalAcpSocket和CsignalSerSocket類(lèi)CSignalAcpSocket和CsignalSerSocket類(lèi)是服務(wù)器端的程序它們的主要成員函數(shù)有:OnAccept(int nErrorCode)、OnClose(int nErrorCode) 和OnSend(int nErrorCode) OnAccept(int nErrorCode):調(diào)用了CasyncSocket的成員函數(shù)OnAccept(nErrorCode),通知監(jiān)聽(tīng)套接字現(xiàn)在可以調(diào)用Accept成員函數(shù)來(lái)接收懸掛的連接請(qǐng)求,再調(diào)用Accept成員函數(shù)接受請(qǐng)求。 OnSend(int nErrorCode):調(diào)用了CasyncSocket的成員函數(shù)OnSend,通知套接字現(xiàn)在可以調(diào)用Send成員函數(shù)發(fā)送數(shù)據(jù)。 OnClose(int nErrorCode):通知該套接字連接上的對(duì)應(yīng)套接字已經(jīng)被相關(guān)進(jìn)程終止了,釋放內(nèi)存。第三節(jié) 通話(huà)過(guò)程的實(shí)現(xiàn)由第二章的第四節(jié)和第五節(jié),我們簡(jiǎn)單了解了我們通話(huà)的流程,本節(jié)介紹這些流程在程序中的實(shí)現(xiàn)。由流程圖我們可以知道,用戶(hù)摘機(jī),撥號(hào),掛機(jī)等操作都是在用戶(hù)的撥號(hào)界面(主界面)進(jìn)行的,所以我們要實(shí)現(xiàn)通話(huà)流程,就應(yīng)該在IPPHONEDlg類(lèi)中的按鍵函數(shù)中實(shí)現(xiàn)。于是,我們首先應(yīng)該在摘機(jī)按下是添加一個(gè)撥號(hào)進(jìn)程DialingThread,然后再撥號(hào)進(jìn)程中實(shí)現(xiàn)撥號(hào)超時(shí)、送忙音等操作,最后撥號(hào)成功后判斷是單呼還是組呼,并進(jìn)行單呼處理或組呼處理。下面分別介紹單呼和組呼處理的實(shí)現(xiàn)一、單呼處理單呼處理分為主叫和被叫,一臺(tái)主機(jī)可能是主叫也可能是被叫,所以要分為主叫和被叫來(lái)編寫(xiě)程序。1.主叫端處理首先創(chuàng)立一個(gè)信令包結(jié)構(gòu)體的對(duì)象,然后將本機(jī)的信息寫(xiě)入這個(gè)信令包中,然后在列表中找到撥出的號(hào)碼,在信令包中添加對(duì)端的ip號(hào)和單呼請(qǐng)求以及本機(jī)狀態(tài),創(chuàng)建一個(gè)CsignalCliSocket類(lèi)的對(duì)象,綁定單呼端口和對(duì)端ip地址后,調(diào)用create函數(shù)創(chuàng)建套接字,并用connect函數(shù)向?qū)Χ朔?wù)器發(fā)出連接請(qǐng)求,等連接成功后將信令包發(fā)出,然后進(jìn)入單呼主叫端通話(huà)進(jìn)程。在單呼主叫端通話(huà)進(jìn)程中,我們首先也是將本機(jī)的信息寫(xiě)入一個(gè)信令包中,然后判斷此時(shí)話(huà)機(jī)的狀態(tài),如果不是HOLDING_TALKING,則進(jìn)行掛機(jī)等一系列操作。如果是HOLDING_TALKING,則調(diào)用ManageSound類(lèi)的Create函數(shù)和Start函數(shù)進(jìn)行語(yǔ)音的采集和錄音并且通信。2.被叫端處理被叫端程序相對(duì)比較簡(jiǎn)單,而且與主叫端比較相似。首先創(chuàng)立一個(gè)CsignalAcpSocket類(lèi)的對(duì)象,然后進(jìn)入單呼被叫端通話(huà)進(jìn)程。我們同樣先將本機(jī)的信息寫(xiě)入一個(gè)信令包中,判斷話(huà)機(jī)是否進(jìn)入HOLDING_TALKING狀態(tài)并判斷話(huà)機(jī)振鈴是否超時(shí)。最后判斷此時(shí)話(huà)機(jī)的狀態(tài),如果不是HOLD
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1