版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、windowswindows 下基于電話線路的數(shù)據(jù)通信程序的設計與實現(xiàn)下基于電話線路的數(shù)據(jù)通信程序的設計與實現(xiàn) 的設計與實現(xiàn)的設計與實現(xiàn) 摘摘 要要 電話網(wǎng)絡是最大的通信網(wǎng)絡,但是我們通常只是用來進行語音傳輸。為了 更好的發(fā)掘電話網(wǎng)絡的潛力,以及解決一些在沒有互聯(lián)網(wǎng)地區(qū)的數(shù)據(jù)的傳輸需 要,開發(fā)一種可以通過電話線路進行數(shù)據(jù)傳輸?shù)能浖呛苡斜匾摹?微軟的電話應用程序接口(tapi)是一種標準的應用程序接口(api),使 得個人電腦能夠通過運行微軟的 windows 系統(tǒng)來使用電話服務。tapi 里面封裝 了所有的對 modem 進行操作的 at 指令,從而我們只需要調(diào)用 tapi 的函數(shù)而不 需
2、要知道底層的具體操作就可以執(zhí)行一個呼叫和應答一個呼叫,以及其他的線 路操作,從而快速開發(fā)出一個基于 windows 平臺的通過電話線路進行數(shù)據(jù)傳輸 的程序。 本文介紹了開發(fā)次程序需要的理論基礎包括 windows 平臺軟件開發(fā)的基礎、 tapi 的概述、tapi 的基本概念。詳細的介紹了軟件開發(fā)的的思路和流程,闡述 了整個呼叫的生命周期內(nèi)的線路上所產(chǎn)生的狀態(tài)消息,以及依據(jù)這些消息而應 該進行的具體操作。根據(jù)軟件開發(fā)的思路的指導以及整個線路消息為程序開發(fā) 的脈絡,本文最后介紹了一個可以在 windows 下面撥打對方的電話號碼,當雙 方連通后可以通過電話線路進行數(shù)據(jù)傳輸?shù)某绦虻木幋a開發(fā)過程,并且
3、最后程序 進行了測試。 關鍵詞:關鍵詞: 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 目目 錄錄 論文總頁數(shù):17
9、 頁 1前言.1 2設計開發(fā)的基礎理論.1 2.1windows sdk 簡介.1 2.2windows 程序的基本結構.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 的體系結構 .4 2.5tapi 的基本概念 .4 3程序設計思想與流程.6 3.1使用 tapi 開發(fā)的基本思路 .6 3.2各功能模塊的設計.8 3.2.1tapi 的配置階段 .8 3.2.2tapi 的連接階段 .8 3.2.3數(shù)據(jù)傳送階段.9 3.2.
10、4關閉連接階段.10 4編碼實現(xiàn).10 4.1程序主類的的定義.10 4.2線路操作的實現(xiàn).11 4.3呼叫的發(fā)起和應答的實現(xiàn).12 4.4數(shù)據(jù)操作的實現(xiàn).13 5軟件測試.14 結 論.14 參考文獻.14 第 1 頁 共 17 頁 1 1前言前言 當今計算機網(wǎng)絡十分普及,但仍有不少地區(qū)無法安裝網(wǎng)絡,相比之下電話 線網(wǎng)比 internet 發(fā)達很多,我們用的寬帶也是在電話線網(wǎng)的基礎上建立起來的。 因此在網(wǎng)絡不發(fā)達地區(qū),在無網(wǎng)絡的情況下能用電話線進行數(shù)據(jù)通訊就十分有 意義了。用電話線進行數(shù)據(jù)通訊不僅可以方便的接收和發(fā)送數(shù)據(jù),比起 internet 數(shù)據(jù)通訊,安全性也是非??煽康?。modem 曾
11、經(jīng)被廣泛用于撥號上網(wǎng), 通過幾年的迅速發(fā)展,已經(jīng)取得了極大的成功。隨著技術的發(fā)展和認識的提高, 人們拓寬了 modem 的應用領域,把它用于遠程數(shù)據(jù)通信。modem 能從計算機接 收串行數(shù)據(jù),通過 pstn 電話網(wǎng)傳送給另一端的 modem ,所以使用 modem 可以 實現(xiàn)兩臺遠程計算機的互聯(lián),就像組成一個廣域網(wǎng)絡系統(tǒng)一樣。當兩臺計算機 通過 modem 撥號連接成功后,它們之間的通信就像串行通信一樣方便。 2 2設計開發(fā)的基礎理論設計開發(fā)的基礎理論 2.12.1 windows sdk 簡介簡介 sdk 即 software develope kit(軟件開發(fā)工具包) ,它包含了進行 wi
12、ndows 軟件開發(fā)的文檔和 api 函數(shù)的輸入庫、頭文件(因為 api 在動態(tài)鏈接 庫中,這些動態(tài)鏈接庫是系統(tǒng)的組成部分因此不用再提供,而輸入庫和頭文件 則必須,這樣才能在你的程序中使用 api 函數(shù)) 。早期 sdk 是一個單獨發(fā)放的包, 現(xiàn)在在 visual c+和其他一些開發(fā)環(huán)境中已經(jīng)包含了它。sdk 編程就是直接調(diào) 用 windows 的 api 進行編程,api 由上千個 api 函數(shù)組成。 2.22.2 windowswindows 程序的基本結構程序的基本結構 2.2.12.2.1 概述概述 windows 程序具有相對固定的結構,對編寫者而言,不需要書寫整個過程, 大部分過程
13、由系統(tǒng)完成。程序中只要按一定的格式填寫系統(tǒng)留給客戶的那一小 部分。所需要完成的有:窗口類的定義、窗口的建立、消息函數(shù)的書寫、消息 循環(huán)。 2.2.22.2.2 消息處理函數(shù)消息處理函數(shù) windows 程序是事件驅動的,對于一個窗口,它的大部分例行維護是由系 統(tǒng)維護的。每個窗口都有一個消息處理函數(shù)。在消息處理函數(shù)中,對傳入的消 息進行處理。系統(tǒng)內(nèi)還有它自己的缺省消息處理函數(shù)。 客戶寫一個消息處理函數(shù),在窗口建立前,將消息處理函數(shù)與窗口關聯(lián)。 這樣,每當有消息產(chǎn)生時,就會去調(diào)用這個消息處理函數(shù)。 通常情況下,客戶都不會處理全部的消息,而是只處理自己感興趣的消息, 其他的,則送回到系統(tǒng)的缺省消息處
14、理函數(shù)中去。 第 2 頁 共 17 頁 消息處理函數(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 窗口的建立窗口的建立 客戶需要自己建立窗口,建立后會得到系統(tǒng)返回的窗口句柄(h
15、wnd),后繼的 針對窗口的操作都針對句柄進行。 1.注冊窗口類 建立窗口前,需要制定好這個窗口的相關屬性,最主要的就是將自己定義 的消息處理函數(shù)與窗口關聯(lián),其他的屬性還包括:菜單、圖標等等。這個屬性 指定步驟是通過指定窗口類來完成的。對于自己建立的窗口,這個窗口類 需要自己制定,也即自己填充一個 wndclass 結構,然后向系統(tǒng)注冊。對于一些 特殊窗口,如按鈕等控件,他們的行為是系統(tǒng)制定好了的,所以不需要自己注 冊,直接使用對應的“窗口類”名稱就行了。 2.建立窗口 建立窗口時,注冊的窗口類名稱作為參數(shù)傳入。這樣,當有針對該窗口 的消息時,將調(diào)用“窗口類”中指定的消息處理函數(shù),在其中得到處
16、理。 2.2.42.2.4 消息循環(huán)消息循環(huán) 系統(tǒng)會將針對這個程序的消息依次放到程序的“消息隊列”中,由程序自 己依次取出消息,在分發(fā)到對應的窗口中去。因此,建立窗口后,將進入一個 循環(huán)。在循環(huán)中,取出消息、派發(fā)消息,循環(huán)往復,直到取得的消息是退出消 第 3 頁 共 17 頁 息。循環(huán)退出后,程序即結束。 2.32.3 modemmodem 的控制的控制 目前模擬電話線路被廣泛用于數(shù)據(jù)傳輸。調(diào)制解調(diào)器(modem)被用來實現(xiàn)數(shù) 字信號到模擬信號和模擬信號到數(shù)字信號的相互轉換。modem 通過 pstn (public switched telephone network,公用交換式電話網(wǎng))來傳
17、輸數(shù)據(jù)。目前 計算機控制調(diào)制解調(diào)器有兩種方法:一種方法是向 modem 發(fā)送 at 指令,另一 種方法是使用 tapi (telephony application programming)即電話應用程序接 口。at 指令集是由 hays 公司首先推出的用于控制自己開發(fā)的 smart modem 系 列產(chǎn)品的命令集合,at 命令集推出后得到廣泛的應用,很快其它生產(chǎn)調(diào)制解調(diào) 器的公司也都使用與 hays 公司 at 指令集兼容的 at 指令集。開發(fā)者利用串行 通信 api 再加上基本的 hays 兼容的 at 命令,就可以實現(xiàn)對 modem 的控制。 但這種方法在 windows 中用起來很不方
18、便。原因如下:許多 modem 制造商已向 標準的 at 指令集中添加了許多變種,這就使應用程序與市售的所有 modem 保 持完全兼容很困難。而 windows 維護了一個數(shù)據(jù)庫,其中包含了商用調(diào)制解調(diào) 器以及每個 modem 支持的 at 命令集變種,使用 tapi 則可以訪問該數(shù)據(jù)庫, 所以使用標準 tapi 函數(shù)生成呼叫和控制 modem 的應用程序不需要知道 at 命令 集的詳細內(nèi)容。 2.42.4 tapitapi 通信編程通信編程 2.4.12.4.1 tapitapi 的含義的含義 計算機電話集成(computer telephony integration,縮寫 cti)是計
19、算機 技術和電信技術相結合的產(chǎn)物。電子通信行業(yè)配備了各種各樣的硬件系統(tǒng),僅 僅收集這些系統(tǒng)的標準、文檔和接口規(guī)范就是很復雜的任務,要設計一個考慮 所有情況的任務就更加困難。為了減輕開發(fā)者的負擔,microsoft 公司和 intel 公司聯(lián)合起來創(chuàng)建了 windows telephony api(tapi)給應用程序編程者提供一 個接口,并且允許應用程序無需改變就可以適應多種多樣的電信系統(tǒng)。 tapi 是 microsoft 公司的 windows 開放式服務結構中的一部分,它包括 兩個接口:開發(fā)人員使用的應用程序接口和用于連接某種電話網(wǎng)絡的接口。 tapi 為通信應用程序提供控制通信的功能,
20、包括數(shù)據(jù)、傳真、語音,以及處理 計算機與電話網(wǎng)之間的信號燈。 tapi 服務為通信應用程序提供了一種與設備無關的方法,避免了使用 at 指令直接訪問硬件可能造成的沖突,并且讓應用程序可以與包括數(shù)字綜合服務 網(wǎng)(intergrated services digital network)在內(nèi)的各種通信網(wǎng)絡通信;同 時還提供了訪問通信端口和設備的通用機制。這樣,多個應用程序就可以共享 這些設備,tapi 管理對各個設備的訪問,讓通用程序協(xié)調(diào)使用這些設備。tapi 第 4 頁 共 17 頁 的設計本身是可以擴展的,從而可以滿足未來通信網(wǎng)絡多方面的需求。 2.4.22.4.2 tapitapi 的體系結
21、構的體系結構 圖 1 是 tapi 體系結構示意圖。作為中間層的 tapi dll,提供對服務提供者 的管理,并在服務提供者與應用程序之間進行信息傳遞。tapi 可以保證多個服 務者和應用程序能夠同時存在,并且不會發(fā)生相互沖突。 圖 1 tapi 的體系結構 在底層將 tapi 和實際的電話硬件連接是 tapi 服務提供者(tapi service provider 縮寫為 tsp).tsp 一般都由硬件生產(chǎn)廠商提供。 2.52.5 tapitapi 的基本概念的基本概念 (1) 設備 id 設備 id 是從零開始按順序分配給每個設備的 id;也就是說,如果安裝了 4 個線路設備,這些線路沒備
22、的設備 id 相應為 0、1、2、3。 (2) 長度變化的數(shù)據(jù)結構 tapi 使用的大多數(shù)的復雜數(shù)據(jù)結構是變長的數(shù)據(jù)結構。這些結構的組織如 圖二所示。最前面 l 的 3 個域分別是 dwtotalsize ,dwneededsize 和 dwusedsize。在這三個域后面是固定長度的域,對每個給定的結構類型固定長 度的域都具有同樣的長度。一般而言,長度范圍從 0 到 300 個字節(jié)或者更長字 節(jié)的結構。存儲在結構中的可變部分的信息總是通過相對于結構定長部分的一 個偏移量來引用,以字節(jié)為單位的偏移量指出變長數(shù)據(jù)的起點的位置。信息量 大小就是變長數(shù)據(jù)所占用的字節(jié)數(shù)。其大小包括字符串末尾的空字符。
23、 這些結構的內(nèi)存總是由應用程序分配。但是數(shù)據(jù)結構需要多大的內(nèi)存空間, 應用程序并不總是知道,這就是設置前三個域的原因。將結構傳送給 tapi 之 前,應用程序可使用緩沖區(qū)的大小填充 dwtotalsize 域。tapi 首先證實該結 構有足夠大空間容納其定長部分,然后填充定長域,接著填入變長項。 tapi 填入變長項直到?jīng)]有空間為止。最后 tapi 用為獲得所有數(shù)據(jù)所需的空間量來填 充 dwneededsize 域,而 dwusedsize 域用 tapi 實際使用的空間量來填充。 第 5 頁 共 17 頁 當應用程序得到該結構時,它首先應該檢查 dwneededsize 助和 dwuseds
24、ize 域。 如果兩者相等, tapi 就能夠找出用于所有變長數(shù)據(jù)的控件。如果 dwusedsize 小于 dwneededsize ,應用程序可以檢查相應的偏移量和域大小看是否有需要 的變長數(shù)據(jù),如果這些數(shù)據(jù)域都被設置為零,那么應用程序必須分配一個更大 的緩沖區(qū)并且重試上述過程。 圖 2 tapi 所用到的數(shù)據(jù)結構 (3) 邏輯線路設備 線路(line)指的是物理電話線路。線的終端位置一般稱為站(station) 。 線路設備(line device)是任何連接計算機到電話線或者線路的物理設備,如 調(diào)制解調(diào)器或 isdn 卡等。線路設備不必位于應用程序運行的計算機上。 邏輯線路設備(logi
25、cal line device)代表一根電話線。邏輯線路設備的 性能取決于它所代表的實際電話線的性能。典型的電話線路稱為 pots (plain old telephone service 普通老式電話服務) 。在 windows 中, pots 線通過單 一邏輯線路設備表示。一些數(shù)字電話線(例如 isdn )包含了多個“信道”或 者信息通路,可用來同時傳送不同類型的數(shù)據(jù),這些多信道數(shù)字線路通常由多 邏輯線路設備表示,一個邏輯線路設備代表一個信道。邏輯電話(logical phone)表示電話。一部典型的電話包括叉簧和轉換器組成。叉簧是可以將電話 與線路連接或掛斷的開關,轉換器是一種由揚聲器和
26、話筒組成的設備,話筒可 以將聲能轉換為電能,或將電能轉換為聲能。 (4) 地址 第 6 頁 共 17 頁 地址 (address) 是字母、數(shù)字和控制字符組成的字符串,它們定義到電話、 調(diào)制解調(diào)器或計算機的路徑。線路、電話和地址是靜態(tài)的,他們有一定程度的 持久性,線路或與計算機連接的電話不經(jīng)常改變,線路的電話號碼也一樣。 (5) 呼叫 呼叫(call) 是當兩個線路設備由電話網(wǎng)絡連接在一起時存在的一種交互狀 態(tài)。呼叫方(calling party)是發(fā)起呼叫的一方,而被呼叫方(called party)則 是應答呼叫的一方。對呼叫可以進行連接、置于保持狀態(tài)以及傳送、召開會議、 暫停、恢復等操作
27、。 每個呼叫在期生存期都會經(jīng)歷許多狀態(tài)。在呼叫改變狀態(tài)時,windows 會 通知控制應用程序。呼叫狀態(tài)包括 dailtone、ringing 和 connected 等。在這 幾個狀態(tài)中,connected 狀態(tài)尤為重要,因為一旦呼叫轉換到這種狀態(tài),數(shù)據(jù) 就可以通過線路發(fā)送出去,到達信宿方。已經(jīng)拆接的呼叫和還沒有開始的呼叫 所處的狀態(tài)都是 idle。 3 3 程序設計思想與流程程序設計思想與流程 3.13.1 使用使用 tapitapi 開發(fā)的基本思路開發(fā)的基本思路 使用 tapi 能夠比較方便地發(fā)出一個呼叫和應答一個呼叫,它對呼叫的操 作簡單方便,給開發(fā)者帶來了很大的方便。總的來說使用 t
28、api 開發(fā) modem 呼 叫控制通信程序流程如下所示: (1) 初始化 tapi :通過調(diào)用 linelnitialize ( )函數(shù)來完成。tapi 通 過調(diào)用這兩個函數(shù)來加載 tapi32 .dll 和有關的電話設備驅動程序,并且指定 檢測線路設備的狀態(tài)和事件的回調(diào)函數(shù)。 (2) 協(xié)商 tapi 版本:iinenegotiateapiversion ( )函數(shù)將找出對應于用 戶的應用程序及線路設備服務者通用的 tapi 的最高版本。 (3) 獲取線路設備的性能:應用程序通過調(diào)用 linegetdevcaps ( )函數(shù)來 確定所使用的 tapi 版本提供的線路設備能力。 (4) 打開線
29、路設備:應用程序調(diào)用 lineopen( ) 函數(shù)打開一條線路設備并 返回一個線路設備的句柄,這個句柄用于完成以后對這個設備的各種操作。 (5) 轉換電話號碼:使用 linetranslateaddress ( )將要撥打的號碼轉換 成可以直接在計算機上撥打的號碼格式。 (6) 開始呼叫或是應答:應用程序調(diào)用 linemakecall ( )函數(shù)進行呼叫, 調(diào)用完成后它將返回帶有擁有者特權的呼叫句柄,此句柄可用在對該次呼叫所 進行的進一步操作。應用程序通過調(diào)用 lineanswer( )函數(shù)來自動應答呼叫。 (7) 掛斷呼叫:在呼叫完成后, linedrop ( )函數(shù)將用來掛斷呼叫,但是 在
30、上一步中得到的擁有者的呼叫句柄并不會因此釋放,因為在呼叫被掛斷以后, 第 7 頁 共 17 頁 呼叫的句柄還有可能被用在一些后續(xù)的操作中??梢酝ㄟ^ linedeallocate ( ) 來釋放呼叫句柄。 (8) 關閉線路設備:應用程序調(diào)用 lineclose ( ) 函數(shù)來關閉被 lineopen ( )函數(shù)打開的線路設備,如果一條線路被應用程序打開后始終沒有 被關閉,那么其它的應用程序將無法訪問該線路。 (9) 結束 tapi 的使用:在一切有關 tapi 的操作完成之后,調(diào)用 lineshutdown()函數(shù)來終止 tapi 的使用,它會隱含地關閉所以打開的線路設 備。 根據(jù) tapi 的
31、開發(fā)基本思路整個程序的設計思路流程如圖 3 圖 3 程序流程圖 第 8 頁 共 17 頁 3.23.2 各功能模塊的設計各功能模塊的設計 3.2.13.2.1 tapitapi 的配置階段的配置階段 tapi 的置階段配置階段包括對線路的配置和對 modem 的配置,只有正確 地配置并打開線路設備之后,才能對 modem 進行配置。以下函數(shù)完成對 tapi 的配置: tapi 類成員函數(shù) telephonylnitialize 分配支持邏輯線路設備的使用所 必須的某些內(nèi)部資源,并返回應用程序一個 tapi 句柄,同時傳遞了一個回調(diào)函 數(shù)的地址作為參數(shù),此函數(shù)處理對整個線路狀態(tài)進行處理。然后使用
32、 tapi 的類 成員函數(shù) linenegotiateapiversion 與 windows 協(xié)商 tapi 版本。tapi 類成員 函數(shù) mylinegetdevcaps 獲得有關邏輯線路的性能的信息 windows 把這些信息 填充到一個名為 linedevcaps 的只讀結構中,應用程序檢查這個結構就可以了 解哪些設置是驅動程序所允許的 tapi 類成員函數(shù) lineopen 打開線路。 3.2.23.2.2 tapitapi 的連接階段的連接階段 tpai 在連接階段 moden 會產(chǎn)生很多消息,消息的處理 tapi 由回調(diào)函數(shù)進 行消息處理,回調(diào)函數(shù)在初始化 tapi 時創(chuàng)建,消息
33、的處理在 tapi 的使用過程 中是至關重要的。以下是一些主要的消息 (1)linecallstate_idle 沒有呼叫,為空,此時應斷接,釋放掉占用的資 源; (2)linecallstate_dialing 撥號中,正在撥號。 (3)linecallstate_busy 線路忙或設備忙,此時應斷接,釋放掉占用的資 源。 (4)linecallstate_specialinfo 特別的消息,此時應斷接,釋放掉占用的 資源; (5)linecallstate_offering 應答方已收到呼叫方信號,此時應進行應答, 調(diào)用 lineanswer 函數(shù); (6)linecallstate_co
34、nnected 已連接成功,此時可進行數(shù)據(jù)的傳輸,但必 須先得到 modem 的句柄 (7)linecallstate_disconnected 已斷接,此時應釋放掉占用的資源。 tapi 類成員函數(shù) makecall 被用于發(fā)起呼叫,產(chǎn)生呼叫后依次進入圖 4 狀 態(tài): 第 9 頁 共 17 頁 圖 4 狀態(tài)流程圖 新生成的呼叫處于 idle 狀態(tài),隨后依次進入 proceding,offering, connected 和 disconnected 最后 回到 idle 狀態(tài)。這些狀態(tài)都通過在調(diào) telephonylnitialize 函數(shù)初始化 tapidll 的時候傳遞的回調(diào)函數(shù)來處理。
35、 3.2.33.2.3 數(shù)據(jù)傳送階段數(shù)據(jù)傳送階段 tapi 并不提供數(shù)據(jù)傳輸?shù)暮瘮?shù)。因為 modem 通過控制計算機串口來進行 通信,所以 modem 的數(shù)據(jù)通信與串口數(shù)據(jù)通信的方法一樣,采用 readfile 和 writefile 函數(shù)來接收數(shù)據(jù)和發(fā)送數(shù)據(jù)。傳送數(shù)據(jù)的時候要用到 modem 的句柄, 此時調(diào)用 tapi 的類成員函數(shù) linegetid 得到 moden 的句柄后就可以通過 readfile 和 writefile 函數(shù)來進行數(shù)據(jù)傳輸。readfile 與 writefile 有兩種模 式,一種是等待模式,一種是非等待模式。等待模式下必須完成了所有讀寫操 作函數(shù)才會返回,最
36、后一個參數(shù)必須為 null。非等待模式下要先定義一個 overlapped 變量,并且作為函數(shù)的最后一個參數(shù)傳遞進去。 非等待模式下函 數(shù)會馬上返回,overlapped 變量在初始化的時候會調(diào) createevent 函數(shù)產(chǎn)生一 個事件,當函數(shù)返回后我們調(diào)用 waiforsingobject(event)函數(shù)讓線程阻塞, 當數(shù)據(jù)傳送完以后操作系統(tǒng)會給應用程序發(fā)出一消息,當應用程序得到此消息 以后程序繼續(xù)往下運行。 一旦呼叫進入 connected 數(shù)據(jù)鏈路連通狀態(tài),則表明連接已經(jīng)建立。此時 第 10 頁 共 17 頁 我們就可以進行數(shù)據(jù)傳輸了,不過在傳送數(shù)據(jù)之前我們要得到 moden 的句柄
37、, 此時調(diào)用 tapi 的類成員函數(shù) linegetid,此函數(shù)會把 moden 的名稱和句柄保存 到一個 varstring 類型的變量里面。通過次句柄我們就可以利用 writefile 和 readfile 來讀寫數(shù)據(jù)了。 3.2.43.2.4 關閉連接階段關閉連接階段 當我們數(shù)據(jù)傳送完成后需要退出程序的時候。我們會對線路進行掛斷操作, tapi 的類成員函數(shù) linedrop 來斷開連接,然后調(diào)用 lineclose 來關閉一條打 開的線路,同時釋放前面階段操作所用到的一些緩存以及復位一些信號型變量。 4 4 編碼實現(xiàn)編碼實現(xiàn) 4.1 程序主類的的定義程序主類的的定義 4.2 線路操作的
38、實現(xiàn)線路操作的實現(xiàn) 4.3 呼叫的發(fā)起和應答的實現(xiàn)呼叫的發(fā)起和應答的實現(xiàn) 呼叫的建立和應答使用類成員函數(shù) makeoutgoingcall、getincomingcall 來 實現(xiàn)。里面封裝了 linemakecall 和 lineanswer 兩個 tapi 類成員函數(shù)。 int ctapiline:makeoutgoingcall(const char *szaddress)/呼出 /呼叫前對呼叫選項的設置 . lret = linemakecall(m_hline, return (lret=0)?0:lret; int ctapiline:getincomingcall()/應答 .
39、lret = linesetnumrings(m_hline,0,5);/設置響鈴次數(shù) lret = lineanswer(m_hcall, null, 0); 4.4 數(shù)據(jù)操作的實現(xiàn)數(shù)據(jù)操作的實現(xiàn) 在程序中數(shù)據(jù)的讀取單獨創(chuàng)建一個線程,定義了一個回調(diào)函數(shù) readthread 封裝了 writefile 和 readfile 來實現(xiàn)數(shù)據(jù)的發(fā)送。 dword winapi cmytapidlg:readthread(lpvoid lpvoid)/接收數(shù)據(jù) overlapped ov; 第 11 頁 共 17 頁 /ov 的初始化設置 for(;!pcdlg-m_bstopreadthread;) readfile(pcdlg-m_hserialhandle,szbuff,512,/讀數(shù)據(jù) /錯誤處理 switc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《習題及答案》課件
- 藥物治療頸外動脈閉塞長期效果-洞察分析
- 線下體驗式營銷升級-洞察分析
- 水污染生物降解機制-洞察分析
- 虛擬農(nóng)場規(guī)劃與管理-洞察分析
- 心臟擴大康復訓練策略-洞察分析
- 先進制造技術在航空應用-洞察分析
- 脫硫自動化控制-洞察分析
- 《v消費者市場分析》課件
- 糖果巧克力市場趨勢分析-洞察分析
- 投標報價得分計算表
- canopen應用指南man can301ig中文
- 工程安全生產(chǎn)竣工評定表
- 5-工程地質(zhì)勘察總說明書(崆峒區(qū))
- 13《社會學的想象力》讀書筆記
- 漢字的起源與發(fā)展
- 廈門大學招生宣傳
- 第三單元復習 課件 語文小學四年級上冊統(tǒng)編版(部編版)18張PPT
- 安全閥使用說明書
- Go語言Hyperledger區(qū)塊鏈開發(fā)實戰(zhàn)PPT完整全套教學課件
- 抖音個人IP代運營服務合同
評論
0/150
提交評論