畢業(yè)設(shè)計(jì)(論文)Windows下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
畢業(yè)設(shè)計(jì)(論文)Windows下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
畢業(yè)設(shè)計(jì)(論文)Windows下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
畢業(yè)設(shè)計(jì)(論文)Windows下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
畢業(yè)設(shè)計(jì)(論文)Windows下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、windowswindows 下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn)下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn) 的設(shè)計(jì)與實(shí)現(xiàn)的設(shè)計(jì)與實(shí)現(xiàn) 摘摘 要要 電話網(wǎng)絡(luò)是最大的通信網(wǎng)絡(luò),但是我們通常只是用來(lái)進(jìn)行語(yǔ)音傳輸。為了 更好的發(fā)掘電話網(wǎng)絡(luò)的潛力,以及解決一些在沒(méi)有互聯(lián)網(wǎng)地區(qū)的數(shù)據(jù)的傳輸需 要,開(kāi)發(fā)一種可以通過(guò)電話線路進(jìn)行數(shù)據(jù)傳輸?shù)能浖呛苡斜匾摹?微軟的電話應(yīng)用程序接口(tapi)是一種標(biāo)準(zhǔn)的應(yīng)用程序接口(api),使 得個(gè)人電腦能夠通過(guò)運(yùn)行微軟的 windows 系統(tǒng)來(lái)使用電話服務(wù)。tapi 里面封裝 了所有的對(duì) modem 進(jìn)行操作的 at 指令,從而我們只需要調(diào)用 tapi 的函數(shù)而不 需

2、要知道底層的具體操作就可以執(zhí)行一個(gè)呼叫和應(yīng)答一個(gè)呼叫,以及其他的線 路操作,從而快速開(kāi)發(fā)出一個(gè)基于 windows 平臺(tái)的通過(guò)電話線路進(jìn)行數(shù)據(jù)傳輸 的程序。 本文介紹了開(kāi)發(fā)次程序需要的理論基礎(chǔ)包括 windows 平臺(tái)軟件開(kāi)發(fā)的基礎(chǔ)、 tapi 的概述、tapi 的基本概念。詳細(xì)的介紹了軟件開(kāi)發(fā)的的思路和流程,闡述 了整個(gè)呼叫的生命周期內(nèi)的線路上所產(chǎn)生的狀態(tài)消息,以及依據(jù)這些消息而應(yīng) 該進(jìn)行的具體操作。根據(jù)軟件開(kāi)發(fā)的思路的指導(dǎo)以及整個(gè)線路消息為程序開(kāi)發(fā) 的脈絡(luò),本文最后介紹了一個(gè)可以在 windows 下面撥打?qū)Ψ降碾娫捥?hào)碼,當(dāng)雙 方連通后可以通過(guò)電話線路進(jìn)行數(shù)據(jù)傳輸?shù)某绦虻木幋a開(kāi)發(fā)過(guò)程,并且

3、最后程序 進(jìn)行了測(cè)試。 關(guān)鍵詞:關(guān)鍵詞: windows;電話線路;數(shù)據(jù)通信;tapi the design and implementation of a telephone-line based communication program in windows operating system abstract the telephony network is the largest communications network, and its generally used for voice transmission. to better utilize the advantages

4、of the telephony network and meet the need of data transmission in places where internet is inaccessible, it is definitely necessary to develop a software which could transmit data over existing telephone lines. microsofts telephone application program interface (tapi), a standard application progra

5、m interface (api), can help personal computers running microsofts windows system to take use of telephone services. tapi has encapsulated all at commands for modem operation, which will only need users to call the tapi function to initiate and answer a call, rather than to know the detail operation

6、on the implementation, nor other operations on the lines. this would largely help to develop a program through telephone lines for data transmission, on a windows-based platform. the paper firstly describes the theoretical basis for the development of sub programs, including the software development

7、 basis on windows platform, tapi overview and its basic concepts. the paper then describes the detail ideas and processes on the software implementation. the paper also represents an entire call life cycle with its possible state messages, and the corresponding operations needed. finally, on the one

8、 below in the windows call each others phone numbers, when the two sides can connect through telephone lines for data transmission procedures for the development of the coding process, and in the final process of the test. key words: windows; telephone lines; data communications; tapi 目目 錄錄 論文總頁(yè)數(shù):17

9、 頁(yè) 1前言.1 2設(shè)計(jì)開(kāi)發(fā)的基礎(chǔ)理論.1 2.1windows sdk 簡(jiǎn)介.1 2.2windows 程序的基本結(jié)構(gòu).1 2.2.1概述.1 2.2.2消息處理函數(shù).1 2.2.3窗口的建立.2 2.2.4消息循環(huán).2 2.3modem 的控制.3 2.4tapi 通信編程.3 2.4.1tapi 的含義 .3 2.4.2tapi 的體系結(jié)構(gòu) .4 2.5tapi 的基本概念 .4 3程序設(shè)計(jì)思想與流程.6 3.1使用 tapi 開(kāi)發(fā)的基本思路 .6 3.2各功能模塊的設(shè)計(jì).8 3.2.1tapi 的配置階段 .8 3.2.2tapi 的連接階段 .8 3.2.3數(shù)據(jù)傳送階段.9 3.2.

10、4關(guān)閉連接階段.10 4編碼實(shí)現(xiàn).10 4.1程序主類的的定義.10 4.2線路操作的實(shí)現(xiàn).11 4.3呼叫的發(fā)起和應(yīng)答的實(shí)現(xiàn).12 4.4數(shù)據(jù)操作的實(shí)現(xiàn).13 5軟件測(cè)試.14 結(jié) 論.14 參考文獻(xiàn).14 第 1 頁(yè) 共 17 頁(yè) 1 1前言前言 當(dāng)今計(jì)算機(jī)網(wǎng)絡(luò)十分普及,但仍有不少地區(qū)無(wú)法安裝網(wǎng)絡(luò),相比之下電話 線網(wǎng)比 internet 發(fā)達(dá)很多,我們用的寬帶也是在電話線網(wǎng)的基礎(chǔ)上建立起來(lái)的。 因此在網(wǎng)絡(luò)不發(fā)達(dá)地區(qū),在無(wú)網(wǎng)絡(luò)的情況下能用電話線進(jìn)行數(shù)據(jù)通訊就十分有 意義了。用電話線進(jìn)行數(shù)據(jù)通訊不僅可以方便的接收和發(fā)送數(shù)據(jù),比起 internet 數(shù)據(jù)通訊,安全性也是非??煽康?。modem 曾

11、經(jīng)被廣泛用于撥號(hào)上網(wǎng), 通過(guò)幾年的迅速發(fā)展,已經(jīng)取得了極大的成功。隨著技術(shù)的發(fā)展和認(rèn)識(shí)的提高, 人們拓寬了 modem 的應(yīng)用領(lǐng)域,把它用于遠(yuǎn)程數(shù)據(jù)通信。modem 能從計(jì)算機(jī)接 收串行數(shù)據(jù),通過(guò) pstn 電話網(wǎng)傳送給另一端的 modem ,所以使用 modem 可以 實(shí)現(xiàn)兩臺(tái)遠(yuǎn)程計(jì)算機(jī)的互聯(lián),就像組成一個(gè)廣域網(wǎng)絡(luò)系統(tǒng)一樣。當(dāng)兩臺(tái)計(jì)算機(jī) 通過(guò) modem 撥號(hào)連接成功后,它們之間的通信就像串行通信一樣方便。 2 2設(shè)計(jì)開(kāi)發(fā)的基礎(chǔ)理論設(shè)計(jì)開(kāi)發(fā)的基礎(chǔ)理論 2.12.1 windows sdk 簡(jiǎn)介簡(jiǎn)介 sdk 即 software develope kit(軟件開(kāi)發(fā)工具包) ,它包含了進(jìn)行 wi

12、ndows 軟件開(kāi)發(fā)的文檔和 api 函數(shù)的輸入庫(kù)、頭文件(因?yàn)?api 在動(dòng)態(tài)鏈接 庫(kù)中,這些動(dòng)態(tài)鏈接庫(kù)是系統(tǒng)的組成部分因此不用再提供,而輸入庫(kù)和頭文件 則必須,這樣才能在你的程序中使用 api 函數(shù)) 。早期 sdk 是一個(gè)單獨(dú)發(fā)放的包, 現(xiàn)在在 visual c+和其他一些開(kāi)發(fā)環(huán)境中已經(jīng)包含了它。sdk 編程就是直接調(diào) 用 windows 的 api 進(jìn)行編程,api 由上千個(gè) api 函數(shù)組成。 2.22.2 windowswindows 程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu) 2.2.12.2.1 概述概述 windows 程序具有相對(duì)固定的結(jié)構(gòu),對(duì)編寫者而言,不需要書(shū)寫整個(gè)過(guò)程, 大部分過(guò)程

13、由系統(tǒng)完成。程序中只要按一定的格式填寫系統(tǒng)留給客戶的那一小 部分。所需要完成的有:窗口類的定義、窗口的建立、消息函數(shù)的書(shū)寫、消息 循環(huán)。 2.2.22.2.2 消息處理函數(shù)消息處理函數(shù) windows 程序是事件驅(qū)動(dòng)的,對(duì)于一個(gè)窗口,它的大部分例行維護(hù)是由系 統(tǒng)維護(hù)的。每個(gè)窗口都有一個(gè)消息處理函數(shù)。在消息處理函數(shù)中,對(duì)傳入的消 息進(jìn)行處理。系統(tǒng)內(nèi)還有它自己的缺省消息處理函數(shù)。 客戶寫一個(gè)消息處理函數(shù),在窗口建立前,將消息處理函數(shù)與窗口關(guān)聯(lián)。 這樣,每當(dāng)有消息產(chǎn)生時(shí),就會(huì)去調(diào)用這個(gè)消息處理函數(shù)。 通常情況下,客戶都不會(huì)處理全部的消息,而是只處理自己感興趣的消息, 其他的,則送回到系統(tǒng)的缺省消息處

14、理函數(shù)中去。 第 2 頁(yè) 共 17 頁(yè) 消息處理函數(shù)的原型如下: 參數(shù):窗口句柄,消息,消息參數(shù),消息參數(shù) lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam) /處理感興趣的消息 switch (message) case . case. /其他消息交給由系統(tǒng)提供的缺省處理函數(shù) return :defwindowproc (hwnd, message, wparam, lparam) ; 2.2.32.2.3 窗口的建立窗口的建立 客戶需要自己建立窗口,建立后會(huì)得到系統(tǒng)返回的窗口句柄(h

15、wnd),后繼的 針對(duì)窗口的操作都針對(duì)句柄進(jìn)行。 1.注冊(cè)窗口類 建立窗口前,需要制定好這個(gè)窗口的相關(guān)屬性,最主要的就是將自己定義 的消息處理函數(shù)與窗口關(guān)聯(lián),其他的屬性還包括:菜單、圖標(biāo)等等。這個(gè)屬性 指定步驟是通過(guò)指定窗口類來(lái)完成的。對(duì)于自己建立的窗口,這個(gè)窗口類 需要自己制定,也即自己填充一個(gè) wndclass 結(jié)構(gòu),然后向系統(tǒng)注冊(cè)。對(duì)于一些 特殊窗口,如按鈕等控件,他們的行為是系統(tǒng)制定好了的,所以不需要自己注 冊(cè),直接使用對(duì)應(yīng)的“窗口類”名稱就行了。 2.建立窗口 建立窗口時(shí),注冊(cè)的窗口類名稱作為參數(shù)傳入。這樣,當(dāng)有針對(duì)該窗口 的消息時(shí),將調(diào)用“窗口類”中指定的消息處理函數(shù),在其中得到處

16、理。 2.2.42.2.4 消息循環(huán)消息循環(huán) 系統(tǒng)會(huì)將針對(duì)這個(gè)程序的消息依次放到程序的“消息隊(duì)列”中,由程序自 己依次取出消息,在分發(fā)到對(duì)應(yīng)的窗口中去。因此,建立窗口后,將進(jìn)入一個(gè) 循環(huán)。在循環(huán)中,取出消息、派發(fā)消息,循環(huán)往復(fù),直到取得的消息是退出消 第 3 頁(yè) 共 17 頁(yè) 息。循環(huán)退出后,程序即結(jié)束。 2.32.3 modemmodem 的控制的控制 目前模擬電話線路被廣泛用于數(shù)據(jù)傳輸。調(diào)制解調(diào)器(modem)被用來(lái)實(shí)現(xiàn)數(shù) 字信號(hào)到模擬信號(hào)和模擬信號(hào)到數(shù)字信號(hào)的相互轉(zhuǎn)換。modem 通過(guò) pstn (public switched telephone network,公用交換式電話網(wǎng))來(lái)傳

17、輸數(shù)據(jù)。目前 計(jì)算機(jī)控制調(diào)制解調(diào)器有兩種方法:一種方法是向 modem 發(fā)送 at 指令,另一 種方法是使用 tapi (telephony application programming)即電話應(yīng)用程序接 口。at 指令集是由 hays 公司首先推出的用于控制自己開(kāi)發(fā)的 smart modem 系 列產(chǎn)品的命令集合,at 命令集推出后得到廣泛的應(yīng)用,很快其它生產(chǎn)調(diào)制解調(diào) 器的公司也都使用與 hays 公司 at 指令集兼容的 at 指令集。開(kāi)發(fā)者利用串行 通信 api 再加上基本的 hays 兼容的 at 命令,就可以實(shí)現(xiàn)對(duì) modem 的控制。 但這種方法在 windows 中用起來(lái)很不方

18、便。原因如下:許多 modem 制造商已向 標(biāo)準(zhǔn)的 at 指令集中添加了許多變種,這就使應(yīng)用程序與市售的所有 modem 保 持完全兼容很困難。而 windows 維護(hù)了一個(gè)數(shù)據(jù)庫(kù),其中包含了商用調(diào)制解調(diào) 器以及每個(gè) modem 支持的 at 命令集變種,使用 tapi 則可以訪問(wèn)該數(shù)據(jù)庫(kù), 所以使用標(biāo)準(zhǔn) tapi 函數(shù)生成呼叫和控制 modem 的應(yīng)用程序不需要知道 at 命令 集的詳細(xì)內(nèi)容。 2.42.4 tapitapi 通信編程通信編程 2.4.12.4.1 tapitapi 的含義的含義 計(jì)算機(jī)電話集成(computer telephony integration,縮寫 cti)是計(jì)

19、算機(jī) 技術(shù)和電信技術(shù)相結(jié)合的產(chǎn)物。電子通信行業(yè)配備了各種各樣的硬件系統(tǒng),僅 僅收集這些系統(tǒng)的標(biāo)準(zhǔn)、文檔和接口規(guī)范就是很復(fù)雜的任務(wù),要設(shè)計(jì)一個(gè)考慮 所有情況的任務(wù)就更加困難。為了減輕開(kāi)發(fā)者的負(fù)擔(dān),microsoft 公司和 intel 公司聯(lián)合起來(lái)創(chuàng)建了 windows telephony api(tapi)給應(yīng)用程序編程者提供一 個(gè)接口,并且允許應(yīng)用程序無(wú)需改變就可以適應(yīng)多種多樣的電信系統(tǒng)。 tapi 是 microsoft 公司的 windows 開(kāi)放式服務(wù)結(jié)構(gòu)中的一部分,它包括 兩個(gè)接口:開(kāi)發(fā)人員使用的應(yīng)用程序接口和用于連接某種電話網(wǎng)絡(luò)的接口。 tapi 為通信應(yīng)用程序提供控制通信的功能,

20、包括數(shù)據(jù)、傳真、語(yǔ)音,以及處理 計(jì)算機(jī)與電話網(wǎng)之間的信號(hào)燈。 tapi 服務(wù)為通信應(yīng)用程序提供了一種與設(shè)備無(wú)關(guān)的方法,避免了使用 at 指令直接訪問(wèn)硬件可能造成的沖突,并且讓應(yīng)用程序可以與包括數(shù)字綜合服務(wù) 網(wǎng)(intergrated services digital network)在內(nèi)的各種通信網(wǎng)絡(luò)通信;同 時(shí)還提供了訪問(wèn)通信端口和設(shè)備的通用機(jī)制。這樣,多個(gè)應(yīng)用程序就可以共享 這些設(shè)備,tapi 管理對(duì)各個(gè)設(shè)備的訪問(wèn),讓通用程序協(xié)調(diào)使用這些設(shè)備。tapi 第 4 頁(yè) 共 17 頁(yè) 的設(shè)計(jì)本身是可以擴(kuò)展的,從而可以滿足未來(lái)通信網(wǎng)絡(luò)多方面的需求。 2.4.22.4.2 tapitapi 的體系結(jié)

21、構(gòu)的體系結(jié)構(gòu) 圖 1 是 tapi 體系結(jié)構(gòu)示意圖。作為中間層的 tapi dll,提供對(duì)服務(wù)提供者 的管理,并在服務(wù)提供者與應(yīng)用程序之間進(jìn)行信息傳遞。tapi 可以保證多個(gè)服 務(wù)者和應(yīng)用程序能夠同時(shí)存在,并且不會(huì)發(fā)生相互沖突。 圖 1 tapi 的體系結(jié)構(gòu) 在底層將 tapi 和實(shí)際的電話硬件連接是 tapi 服務(wù)提供者(tapi service provider 縮寫為 tsp).tsp 一般都由硬件生產(chǎn)廠商提供。 2.52.5 tapitapi 的基本概念的基本概念 (1) 設(shè)備 id 設(shè)備 id 是從零開(kāi)始按順序分配給每個(gè)設(shè)備的 id;也就是說(shuō),如果安裝了 4 個(gè)線路設(shè)備,這些線路沒(méi)備

22、的設(shè)備 id 相應(yīng)為 0、1、2、3。 (2) 長(zhǎng)度變化的數(shù)據(jù)結(jié)構(gòu) tapi 使用的大多數(shù)的復(fù)雜數(shù)據(jù)結(jié)構(gòu)是變長(zhǎng)的數(shù)據(jù)結(jié)構(gòu)。這些結(jié)構(gòu)的組織如 圖二所示。最前面 l 的 3 個(gè)域分別是 dwtotalsize ,dwneededsize 和 dwusedsize。在這三個(gè)域后面是固定長(zhǎng)度的域,對(duì)每個(gè)給定的結(jié)構(gòu)類型固定長(zhǎng) 度的域都具有同樣的長(zhǎng)度。一般而言,長(zhǎng)度范圍從 0 到 300 個(gè)字節(jié)或者更長(zhǎng)字 節(jié)的結(jié)構(gòu)。存儲(chǔ)在結(jié)構(gòu)中的可變部分的信息總是通過(guò)相對(duì)于結(jié)構(gòu)定長(zhǎng)部分的一 個(gè)偏移量來(lái)引用,以字節(jié)為單位的偏移量指出變長(zhǎng)數(shù)據(jù)的起點(diǎn)的位置。信息量 大小就是變長(zhǎng)數(shù)據(jù)所占用的字節(jié)數(shù)。其大小包括字符串末尾的空字符。

23、 這些結(jié)構(gòu)的內(nèi)存總是由應(yīng)用程序分配。但是數(shù)據(jù)結(jié)構(gòu)需要多大的內(nèi)存空間, 應(yīng)用程序并不總是知道,這就是設(shè)置前三個(gè)域的原因。將結(jié)構(gòu)傳送給 tapi 之 前,應(yīng)用程序可使用緩沖區(qū)的大小填充 dwtotalsize 域。tapi 首先證實(shí)該結(jié) 構(gòu)有足夠大空間容納其定長(zhǎng)部分,然后填充定長(zhǎng)域,接著填入變長(zhǎng)項(xiàng)。 tapi 填入變長(zhǎng)項(xiàng)直到?jīng)]有空間為止。最后 tapi 用為獲得所有數(shù)據(jù)所需的空間量來(lái)填 充 dwneededsize 域,而 dwusedsize 域用 tapi 實(shí)際使用的空間量來(lái)填充。 第 5 頁(yè) 共 17 頁(yè) 當(dāng)應(yīng)用程序得到該結(jié)構(gòu)時(shí),它首先應(yīng)該檢查 dwneededsize 助和 dwuseds

24、ize 域。 如果兩者相等, tapi 就能夠找出用于所有變長(zhǎng)數(shù)據(jù)的控件。如果 dwusedsize 小于 dwneededsize ,應(yīng)用程序可以檢查相應(yīng)的偏移量和域大小看是否有需要 的變長(zhǎng)數(shù)據(jù),如果這些數(shù)據(jù)域都被設(shè)置為零,那么應(yīng)用程序必須分配一個(gè)更大 的緩沖區(qū)并且重試上述過(guò)程。 圖 2 tapi 所用到的數(shù)據(jù)結(jié)構(gòu) (3) 邏輯線路設(shè)備 線路(line)指的是物理電話線路。線的終端位置一般稱為站(station) 。 線路設(shè)備(line device)是任何連接計(jì)算機(jī)到電話線或者線路的物理設(shè)備,如 調(diào)制解調(diào)器或 isdn 卡等。線路設(shè)備不必位于應(yīng)用程序運(yùn)行的計(jì)算機(jī)上。 邏輯線路設(shè)備(logi

25、cal line device)代表一根電話線。邏輯線路設(shè)備的 性能取決于它所代表的實(shí)際電話線的性能。典型的電話線路稱為 pots (plain old telephone service 普通老式電話服務(wù)) 。在 windows 中, pots 線通過(guò)單 一邏輯線路設(shè)備表示。一些數(shù)字電話線(例如 isdn )包含了多個(gè)“信道”或 者信息通路,可用來(lái)同時(shí)傳送不同類型的數(shù)據(jù),這些多信道數(shù)字線路通常由多 邏輯線路設(shè)備表示,一個(gè)邏輯線路設(shè)備代表一個(gè)信道。邏輯電話(logical phone)表示電話。一部典型的電話包括叉簧和轉(zhuǎn)換器組成。叉簧是可以將電話 與線路連接或掛斷的開(kāi)關(guān),轉(zhuǎn)換器是一種由揚(yáng)聲器和

26、話筒組成的設(shè)備,話筒可 以將聲能轉(zhuǎn)換為電能,或?qū)㈦娔苻D(zhuǎn)換為聲能。 (4) 地址 第 6 頁(yè) 共 17 頁(yè) 地址 (address) 是字母、數(shù)字和控制字符組成的字符串,它們定義到電話、 調(diào)制解調(diào)器或計(jì)算機(jī)的路徑。線路、電話和地址是靜態(tài)的,他們有一定程度的 持久性,線路或與計(jì)算機(jī)連接的電話不經(jīng)常改變,線路的電話號(hào)碼也一樣。 (5) 呼叫 呼叫(call) 是當(dāng)兩個(gè)線路設(shè)備由電話網(wǎng)絡(luò)連接在一起時(shí)存在的一種交互狀 態(tài)。呼叫方(calling party)是發(fā)起呼叫的一方,而被呼叫方(called party)則 是應(yīng)答呼叫的一方。對(duì)呼叫可以進(jìn)行連接、置于保持狀態(tài)以及傳送、召開(kāi)會(huì)議、 暫停、恢復(fù)等操作

27、。 每個(gè)呼叫在期生存期都會(huì)經(jīng)歷許多狀態(tài)。在呼叫改變狀態(tài)時(shí),windows 會(huì) 通知控制應(yīng)用程序。呼叫狀態(tài)包括 dailtone、ringing 和 connected 等。在這 幾個(gè)狀態(tài)中,connected 狀態(tài)尤為重要,因?yàn)橐坏┖艚修D(zhuǎn)換到這種狀態(tài),數(shù)據(jù) 就可以通過(guò)線路發(fā)送出去,到達(dá)信宿方。已經(jīng)拆接的呼叫和還沒(méi)有開(kāi)始的呼叫 所處的狀態(tài)都是 idle。 3 3 程序設(shè)計(jì)思想與流程程序設(shè)計(jì)思想與流程 3.13.1 使用使用 tapitapi 開(kāi)發(fā)的基本思路開(kāi)發(fā)的基本思路 使用 tapi 能夠比較方便地發(fā)出一個(gè)呼叫和應(yīng)答一個(gè)呼叫,它對(duì)呼叫的操 作簡(jiǎn)單方便,給開(kāi)發(fā)者帶來(lái)了很大的方便??偟膩?lái)說(shuō)使用 t

28、api 開(kāi)發(fā) modem 呼 叫控制通信程序流程如下所示: (1) 初始化 tapi :通過(guò)調(diào)用 linelnitialize ( )函數(shù)來(lái)完成。tapi 通 過(guò)調(diào)用這兩個(gè)函數(shù)來(lái)加載 tapi32 .dll 和有關(guān)的電話設(shè)備驅(qū)動(dòng)程序,并且指定 檢測(cè)線路設(shè)備的狀態(tài)和事件的回調(diào)函數(shù)。 (2) 協(xié)商 tapi 版本:iinenegotiateapiversion ( )函數(shù)將找出對(duì)應(yīng)于用 戶的應(yīng)用程序及線路設(shè)備服務(wù)者通用的 tapi 的最高版本。 (3) 獲取線路設(shè)備的性能:應(yīng)用程序通過(guò)調(diào)用 linegetdevcaps ( )函數(shù)來(lái) 確定所使用的 tapi 版本提供的線路設(shè)備能力。 (4) 打開(kāi)線

29、路設(shè)備:應(yīng)用程序調(diào)用 lineopen( ) 函數(shù)打開(kāi)一條線路設(shè)備并 返回一個(gè)線路設(shè)備的句柄,這個(gè)句柄用于完成以后對(duì)這個(gè)設(shè)備的各種操作。 (5) 轉(zhuǎn)換電話號(hào)碼:使用 linetranslateaddress ( )將要撥打的號(hào)碼轉(zhuǎn)換 成可以直接在計(jì)算機(jī)上撥打的號(hào)碼格式。 (6) 開(kāi)始呼叫或是應(yīng)答:應(yīng)用程序調(diào)用 linemakecall ( )函數(shù)進(jìn)行呼叫, 調(diào)用完成后它將返回帶有擁有者特權(quán)的呼叫句柄,此句柄可用在對(duì)該次呼叫所 進(jìn)行的進(jìn)一步操作。應(yīng)用程序通過(guò)調(diào)用 lineanswer( )函數(shù)來(lái)自動(dòng)應(yīng)答呼叫。 (7) 掛斷呼叫:在呼叫完成后, linedrop ( )函數(shù)將用來(lái)掛斷呼叫,但是 在

30、上一步中得到的擁有者的呼叫句柄并不會(huì)因此釋放,因?yàn)樵诤艚斜粧鞌嘁院螅?第 7 頁(yè) 共 17 頁(yè) 呼叫的句柄還有可能被用在一些后續(xù)的操作中??梢酝ㄟ^(guò) linedeallocate ( ) 來(lái)釋放呼叫句柄。 (8) 關(guān)閉線路設(shè)備:應(yīng)用程序調(diào)用 lineclose ( ) 函數(shù)來(lái)關(guān)閉被 lineopen ( )函數(shù)打開(kāi)的線路設(shè)備,如果一條線路被應(yīng)用程序打開(kāi)后始終沒(méi)有 被關(guān)閉,那么其它的應(yīng)用程序?qū)o(wú)法訪問(wèn)該線路。 (9) 結(jié)束 tapi 的使用:在一切有關(guān) tapi 的操作完成之后,調(diào)用 lineshutdown()函數(shù)來(lái)終止 tapi 的使用,它會(huì)隱含地關(guān)閉所以打開(kāi)的線路設(shè) 備。 根據(jù) tapi 的

31、開(kāi)發(fā)基本思路整個(gè)程序的設(shè)計(jì)思路流程如圖 3 圖 3 程序流程圖 第 8 頁(yè) 共 17 頁(yè) 3.23.2 各功能模塊的設(shè)計(jì)各功能模塊的設(shè)計(jì) 3.2.13.2.1 tapitapi 的配置階段的配置階段 tapi 的置階段配置階段包括對(duì)線路的配置和對(duì) modem 的配置,只有正確 地配置并打開(kāi)線路設(shè)備之后,才能對(duì) modem 進(jìn)行配置。以下函數(shù)完成對(duì) tapi 的配置: tapi 類成員函數(shù) telephonylnitialize 分配支持邏輯線路設(shè)備的使用所 必須的某些內(nèi)部資源,并返回應(yīng)用程序一個(gè) tapi 句柄,同時(shí)傳遞了一個(gè)回調(diào)函 數(shù)的地址作為參數(shù),此函數(shù)處理對(duì)整個(gè)線路狀態(tài)進(jìn)行處理。然后使用

32、 tapi 的類 成員函數(shù) linenegotiateapiversion 與 windows 協(xié)商 tapi 版本。tapi 類成員 函數(shù) mylinegetdevcaps 獲得有關(guān)邏輯線路的性能的信息 windows 把這些信息 填充到一個(gè)名為 linedevcaps 的只讀結(jié)構(gòu)中,應(yīng)用程序檢查這個(gè)結(jié)構(gòu)就可以了 解哪些設(shè)置是驅(qū)動(dòng)程序所允許的 tapi 類成員函數(shù) lineopen 打開(kāi)線路。 3.2.23.2.2 tapitapi 的連接階段的連接階段 tpai 在連接階段 moden 會(huì)產(chǎn)生很多消息,消息的處理 tapi 由回調(diào)函數(shù)進(jìn) 行消息處理,回調(diào)函數(shù)在初始化 tapi 時(shí)創(chuàng)建,消息

33、的處理在 tapi 的使用過(guò)程 中是至關(guān)重要的。以下是一些主要的消息 (1)linecallstate_idle 沒(méi)有呼叫,為空,此時(shí)應(yīng)斷接,釋放掉占用的資 源; (2)linecallstate_dialing 撥號(hào)中,正在撥號(hào)。 (3)linecallstate_busy 線路忙或設(shè)備忙,此時(shí)應(yīng)斷接,釋放掉占用的資 源。 (4)linecallstate_specialinfo 特別的消息,此時(shí)應(yīng)斷接,釋放掉占用的 資源; (5)linecallstate_offering 應(yīng)答方已收到呼叫方信號(hào),此時(shí)應(yīng)進(jìn)行應(yīng)答, 調(diào)用 lineanswer 函數(shù); (6)linecallstate_co

34、nnected 已連接成功,此時(shí)可進(jìn)行數(shù)據(jù)的傳輸,但必 須先得到 modem 的句柄 (7)linecallstate_disconnected 已斷接,此時(shí)應(yīng)釋放掉占用的資源。 tapi 類成員函數(shù) makecall 被用于發(fā)起呼叫,產(chǎn)生呼叫后依次進(jìn)入圖 4 狀 態(tài): 第 9 頁(yè) 共 17 頁(yè) 圖 4 狀態(tài)流程圖 新生成的呼叫處于 idle 狀態(tài),隨后依次進(jìn)入 proceding,offering, connected 和 disconnected 最后 回到 idle 狀態(tài)。這些狀態(tài)都通過(guò)在調(diào) telephonylnitialize 函數(shù)初始化 tapidll 的時(shí)候傳遞的回調(diào)函數(shù)來(lái)處理。

35、 3.2.33.2.3 數(shù)據(jù)傳送階段數(shù)據(jù)傳送階段 tapi 并不提供數(shù)據(jù)傳輸?shù)暮瘮?shù)。因?yàn)?modem 通過(guò)控制計(jì)算機(jī)串口來(lái)進(jìn)行 通信,所以 modem 的數(shù)據(jù)通信與串口數(shù)據(jù)通信的方法一樣,采用 readfile 和 writefile 函數(shù)來(lái)接收數(shù)據(jù)和發(fā)送數(shù)據(jù)。傳送數(shù)據(jù)的時(shí)候要用到 modem 的句柄, 此時(shí)調(diào)用 tapi 的類成員函數(shù) linegetid 得到 moden 的句柄后就可以通過(guò) readfile 和 writefile 函數(shù)來(lái)進(jìn)行數(shù)據(jù)傳輸。readfile 與 writefile 有兩種模 式,一種是等待模式,一種是非等待模式。等待模式下必須完成了所有讀寫操 作函數(shù)才會(huì)返回,最

36、后一個(gè)參數(shù)必須為 null。非等待模式下要先定義一個(gè) overlapped 變量,并且作為函數(shù)的最后一個(gè)參數(shù)傳遞進(jìn)去。 非等待模式下函 數(shù)會(huì)馬上返回,overlapped 變量在初始化的時(shí)候會(huì)調(diào) createevent 函數(shù)產(chǎn)生一 個(gè)事件,當(dāng)函數(shù)返回后我們調(diào)用 waiforsingobject(event)函數(shù)讓線程阻塞, 當(dāng)數(shù)據(jù)傳送完以后操作系統(tǒng)會(huì)給應(yīng)用程序發(fā)出一消息,當(dāng)應(yīng)用程序得到此消息 以后程序繼續(xù)往下運(yùn)行。 一旦呼叫進(jìn)入 connected 數(shù)據(jù)鏈路連通狀態(tài),則表明連接已經(jīng)建立。此時(shí) 第 10 頁(yè) 共 17 頁(yè) 我們就可以進(jìn)行數(shù)據(jù)傳輸了,不過(guò)在傳送數(shù)據(jù)之前我們要得到 moden 的句柄

37、, 此時(shí)調(diào)用 tapi 的類成員函數(shù) linegetid,此函數(shù)會(huì)把 moden 的名稱和句柄保存 到一個(gè) varstring 類型的變量里面。通過(guò)次句柄我們就可以利用 writefile 和 readfile 來(lái)讀寫數(shù)據(jù)了。 3.2.43.2.4 關(guān)閉連接階段關(guān)閉連接階段 當(dāng)我們數(shù)據(jù)傳送完成后需要退出程序的時(shí)候。我們會(huì)對(duì)線路進(jìn)行掛斷操作, tapi 的類成員函數(shù) linedrop 來(lái)斷開(kāi)連接,然后調(diào)用 lineclose 來(lái)關(guān)閉一條打 開(kāi)的線路,同時(shí)釋放前面階段操作所用到的一些緩存以及復(fù)位一些信號(hào)型變量。 4 4 編碼實(shí)現(xiàn)編碼實(shí)現(xiàn) 4.1 程序主類的的定義程序主類的的定義 4.2 線路操作的

38、實(shí)現(xiàn)線路操作的實(shí)現(xiàn) 4.3 呼叫的發(fā)起和應(yīng)答的實(shí)現(xiàn)呼叫的發(fā)起和應(yīng)答的實(shí)現(xiàn) 呼叫的建立和應(yīng)答使用類成員函數(shù) makeoutgoingcall、getincomingcall 來(lái) 實(shí)現(xiàn)。里面封裝了 linemakecall 和 lineanswer 兩個(gè) tapi 類成員函數(shù)。 int ctapiline:makeoutgoingcall(const char *szaddress)/呼出 /呼叫前對(duì)呼叫選項(xiàng)的設(shè)置 . lret = linemakecall(m_hline, return (lret=0)?0:lret; int ctapiline:getincomingcall()/應(yīng)答 .

39、lret = linesetnumrings(m_hline,0,5);/設(shè)置響鈴次數(shù) lret = lineanswer(m_hcall, null, 0); 4.4 數(shù)據(jù)操作的實(shí)現(xiàn)數(shù)據(jù)操作的實(shí)現(xiàn) 在程序中數(shù)據(jù)的讀取單獨(dú)創(chuàng)建一個(gè)線程,定義了一個(gè)回調(diào)函數(shù) readthread 封裝了 writefile 和 readfile 來(lái)實(shí)現(xiàn)數(shù)據(jù)的發(fā)送。 dword winapi cmytapidlg:readthread(lpvoid lpvoid)/接收數(shù)據(jù) overlapped ov; 第 11 頁(yè) 共 17 頁(yè) /ov 的初始化設(shè)置 for(;!pcdlg-m_bstopreadthread;) readfile(pcdlg-m_hserialhandle,szbuff,512,/讀數(shù)據(jù) /錯(cuò)誤處理 switc

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論