基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx

上传人:b****2 文档编号:3425980 上传时间:2023-05-01 格式:DOCX 页数:21 大小:136.90KB
下载 相关 举报
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第1页
第1页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第2页
第2页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第3页
第3页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第4页
第4页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第5页
第5页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第6页
第6页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第7页
第7页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第8页
第8页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第9页
第9页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第10页
第10页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第11页
第11页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第12页
第12页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第13页
第13页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第14页
第14页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第15页
第15页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第16页
第16页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第17页
第17页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第18页
第18页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第19页
第19页 / 共21页
基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx

《基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx(21页珍藏版)》请在冰点文库上搜索。

基于电话线路的数据通信程序的设计与实现毕业设计Word格式文档下载.docx

Keywords:

Windows;

telephonelines;

dataCommunications;

TAPI

目录

论文总页数:

17页

1前言1

2设计开发的基础理论1

2.1WindowsSDK简介1

2.2Windows程序的基本结构1

2.2.1概述1

2.2.2消息处理函数1

2.2.3窗口的建立2

2.2.4消息循环2

2.3MODEM的控制3

2.4TAPI通信编程3

2.4.1TAPI的含义3

2.4.2TAPI的体系结构4

2.5TAPI的基本概念4

3程序设计思想与流程6

3.1使用TAPI开发的基本思路6

3.2各功能模块的设计8

3.2.1TAPI的配置阶段8

3.2.2TAPI的连接阶段8

3.2.3数据传送阶段9

3.2.4关闭连接阶段10

4编码实现10

4.1程序主类的的定义10

4.2线路操作的实现11

4.3呼叫的发起和应答的实现12

4.4数据操作的实现13

5软件测试14

结论14

参考文献14

致谢16

声明17

1前言

当今计算机网络十分普及,但仍有不少地区无法安装网络,相比之下电话线网比internet发达很多,我们用的宽带也是在电话线网的基础上建立起来的。

因此在网络不发达地区,在无网络的情况下能用电话线进行数据通讯就十分有意义了。

用电话线进行数据通讯不仅可以方便的接收和发送数据,比起internet数据通讯,安全性也是非常可靠的。

MODEM曾经被广泛用于拨号上网,通过几年的迅速发展,已经取得了极大的成功。

随着技术的发展和认识的提高,人们拓宽了MODEM的应用领域,把它用于远程数据通信。

MODEM能从计算机接收串行数据,通过PSTN电话网传送给另一端的MODEM,所以使用MODEM可以实现两台远程计算机的互联,就像组成一个广域网络系统一样。

当两台计算机通过MODEM拨号连接成功后,它们之间的通信就像串行通信一样方便。

2设计开发的基础理论

2.1WindowsSDK简介

SDK即softwaredevelopekit(软件开发工具包),它包含了进行Windows软件开发的文档和API函数的输入库、头文件(因为API在动态链接库中,这些动态链接库是系统的组成部分因此不用再提供,而输入库和头文件则必须,这样才能在你的程序中使用API函数)。

早期SDK是一个单独发放的包,现在在VisualC++和其他一些开发环境中已经包含了它。

SDK编程就是直接调用Windows的API进行编程,API由上千个API函数组成。

2.2Windows程序的基本结构

2.2.1概述

Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。

程序中只要按一定的格式填写系统留给客户的那一小部分。

所需要完成的有:

窗口类的定义、窗口的建立、消息函数的书写、消息循环。

2.2.2消息处理函数

Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。

每个窗口都有一个消息处理函数。

在消息处理函数中,对传入的消息进行处理。

系统内还有它自己的缺省消息处理函数。

客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。

这样,每当有消息产生时,就会去调用这个消息处理函数。

通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。

消息处理函数的原型如下:

参数:

窗口句柄,消息,消息参数,消息参数

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

//处理感兴趣的消息

switch(message)

{

case….

……

case…..

}

//其他消息交给由系统提供的缺省处理函数

return:

:

DefWindowProc(hwnd,message,wParam,lParam);

2.2.3窗口的建立

客户需要自己建立窗口,建立后会得到系统返回的窗口句柄(HWND),后继的针对窗口的操作都针对句柄进行。

1.注册窗口类

建立窗口前,需要制定好这个窗口的相关属性,最主要的就是将自己定义的消息处理函数与窗口关联,其他的属性还包括:

菜单、图标等等。

这个属性指定步骤是通过指定"

窗口类"

来完成的。

对于自己建立的窗口,这个"

需要自己制定,也即自己填充一个WNDCLASS结构,然后向系统注册。

对于一些特殊窗口,如按钮等控件,他们的行为是系统制定好了的,所以不需要自己注册,直接使用对应的“窗口类”名称就行了。

2.建立窗口

建立窗口时,注册的"

名称作为参数传入。

这样,当有针对该窗口的消息时,将调用“窗口类”中指定的消息处理函数,在其中得到处理。

2.2.4消息循环

系统会将针对这个程序的消息依次放到程序的“消息队列”中,由程序自己依次取出消息,在分发到对应的窗口中去。

因此,建立窗口后,将进入一个循环。

在循环中,取出消息、派发消息,循环往复,直到取得的消息是退出消息。

循环退出后,程序即结束。

2.3MODEM的控制

目前模拟电话线路被广泛用于数据传输。

调制解调器(MODEM)被用来实现数字信号到模拟信号和模拟信号到数字信号的相互转换。

MODEM通过PSTN(publicswitchedtelephonenetwork,公用交换式电话网)来传输数据。

目前计算机控制调制解调器有两种方法:

一种方法是向MODEM发送AT指令,另一种方法是使用TAPI(telephonyapplicationprogramming)即电话应用程序接口。

AT指令集是由Hays公司首先推出的用于控制自己开发的smartmodem系列产品的命令集合,AT命令集推出后得到广泛的应用,很快其它生产调制解调器的公司也都使用与Hays公司AT指令集兼容的AT指令集。

开发者利用串行通信API再加上基本的Hays兼容的AT命令,就可以实现对MODEM的控制。

但这种方法在windows中用起来很不方便。

原因如下:

许多MODEM制造商已向标准的AT指令集中添加了许多变种,这就使应用程序与市售的所有MODEM保持完全兼容很困难。

而Windows维护了一个数据库,其中包含了商用调制解调器以及每个MODEM支持的AT命令集变种,使用TAPI则可以访问该数据库,所以使用标准TAPI函数生成呼叫和控制MODEM的应用程序不需要知道AT命令集的详细内容。

2.4TAPI通信编程

2.4.1TAPI的含义

计算机电话集成(ComputerTelephonyIntegration,缩写CTI)是计算机技术和电信技术相结合的产物。

电子通信行业配备了各种各样的硬件系统,仅仅收集这些系统的标准、文档和接口规范就是很复杂的任务,要设计一个考虑所有情况的任务就更加困难。

为了减轻开发者的负担,Microsoft公司和Intel公司联合起来创建了WindowsTelephonyAPI(TAPI)给应用程序编程者提供一个接口,并且允许应用程序无需改变就可以适应多种多样的电信系统。

TAPI是Microsoft公司的Windows开放式服务结构中的一部分,它包括两个接口:

开发人员使用的应用程序接口和用于连接某种电话网络的接口。

TAPI为通信应用程序提供控制通信的功能,包括数据、传真、语音,以及处理计算机与电话网之间的信号灯。

TAPI服务为通信应用程序提供了一种与设备无关的方法,避免了使用AT指令直接访问硬件可能造成的冲突,并且让应用程序可以与包括数字综合服务网(IntergratedServicesDigitalNetwork)在内的各种通信网络通信;

同时还提供了访问通信端口和设备的通用机制。

这样,多个应用程序就可以共享这些设备,TAPI管理对各个设备的访问,让通用程序协调使用这些设备。

TAPI的设计本身是可以扩展的,从而可以满足未来通信网络多方面的需求。

2.4.2TAPI的体系结构

图1是TAPI体系结构示意图。

作为中间层的TAPIDLL,提供对服务提供者的管理,并在服务提供者与应用程序之间进行信息传递。

TAPI可以保证多个服务者和应用程序能够同时存在,并且不会发生相互冲突。

图1TAPI的体系结构

在底层将TAPI和实际的电话硬件连接是TAPI服务提供者(TAPIServiceProvider缩写为TSP).TSP一般都由硬件生产厂商提供。

2.5TAPI的基本概念

(1)设备ID

设备ID是从零开始按顺序分配给每个设备的ID;

也就是说,如果安装了4个线路设备,这些线路没备的设备ID相应为0、1、2、3。

(2)长度变化的数据结构

TAPI使用的大多数的复杂数据结构是变长的数据结构。

这些结构的组织如图二所示。

最前面l的3个域分别是dwTotalsize,dwNeededsize和dwUsedSize。

在这三个域后面是固定长度的域,对每个给定的结构类型固定长度的域都具有同样的长度。

一般而言,长度范围从0到300个字节或者更长字节的结构。

存储在结构中的可变部分的信息总是通过相对于结构定长部分的一个偏移量来引用,以字节为单位的偏移量指出变长数据的起点的位置。

信息量大小就是变长数据所占用的字节数。

其大小包括字符串末尾的空字符。

这些结构的内存总是由应用程序分配。

但是数据结构需要多大的内存空间,应用程序并不总是知道,这就是设置前三个域的原因。

将结构传送给TAPI之前,应用程序可使用缓冲区的大小填充dwTotalsize域。

TAPI首先证实该结构有足够大空间容纳其定长部分,然后填充定长域,接着填入变长项。

TAPI填入变长项直到没有空间为止。

最后TAPI用为获得所有数据所需的空间量来填充dwNeededsize域,而dwUsedsize域用TAPI实际使用的空间量来填充。

当应用程序得到该结构时,它首先应该检查dwNeededsize助和dwUsedSize域。

如果两者相等,TAPI就能够找出用于所有变长数据的控件。

如果dwusedsize小于dwNeededsize,应用程序可以检查相应的偏移量和域大小看是否有需要的变长数据,如果这些数据域都被设置为零,那么应用程序必须分配一个更大的缓冲区并且重试上述过程。

图2TAPI所用到的数据结构

(3)逻辑线路设备

线路(Line)指的是物理电话线路。

线的终端位置一般称为站(station)。

线路设备(Linedevice)是任何连接计算机到电话线或者线路的物理设备,如调制解调器或ISDN卡等。

线路设备不必位于应用程序运行的计算机上。

逻辑线路设备(logicallinedevice)代表一根电话线。

逻辑线路设备的性能取决于它所代表的实际电话线的性能。

典型的电话线路称为POTS(PlainoldTelephoneservice普通老式电话服务)。

在Windows中,POTS线通过单一逻辑线路设备表示。

一些数字电话线(例如ISDN)包含了多个“信道”或者信息通路,可用来同时传送不同类型的数据,这些多信道数字线路通常由多逻辑线路设备表示,一个逻辑线路设备代表一个信道。

逻辑电话(Logicalphone)表示电话。

一部典型的电话包括叉簧和转换器组成。

叉簧是可以将电话与线路连接或挂断的开关,转换器是一种由扬声器和话筒组成的设备,话筒可以将声能转换为电能,或将电能转换为声能。

(4)地址

地址(Address)是字母、数字和控制字符组成的字符串,它们定义到电话、调制解调器或计算机的路径。

线路、电话和地址是静态的,他们有一定程度的持久性,线路或与计算机连接的电话不经常改变,线路的电话号码也一样。

(5)呼叫

呼叫(call)是当两个线路设备由电话网络连接在一起时存在的一种交互状态。

呼叫方(callingparty)是发起呼叫的一方,而被呼叫方(calledparty)则是应答呼叫的一方。

对呼叫可以进行连接、置于保持状态以及传送、召开会议、暂停、恢复等操作。

每个呼叫在期生存期都会经历许多状态。

在呼叫改变状态时,Windows会通知控制应用程序。

呼叫状态包括DAILTONE、RINGING和CONNECTED等。

在这几个状态中,CONNECTED状态尤为重要,因为一旦呼叫转换到这种状态,数据就可以通过线路发送出去,到达信宿方。

已经拆接的呼叫和还没有开始的呼叫所处的状态都是IDLE。

3程序设计思想与流程

3.1使用TAPI开发的基本思路

使用TAPI能够比较方便地发出一个呼叫和应答一个呼叫,它对呼叫的操作简单方便,给开发者带来了很大的方便。

总的来说使用TAPI开发MODEM呼叫控制通信程序流程如下所示:

(1)初始化TAPI:

通过调用linelnitialize()函数来完成。

TAPI通过调用这两个函数来加载Tapi32.dll和有关的电话设备驱动程序,并且指定检测线路设备的状态和事件的回调函数。

(2)协商TAPI版本:

IineNegotiateAPIVersion()函数将找出对应于用户的应用程序及线路设备服务者通用的TAPI的最高版本。

(3)获取线路设备的性能:

应用程序通过调用lineGetDevCaps()函数来确定所使用的TAPI版本提供的线路设备能力。

(4)打开线路设备:

应用程序调用lineOpen()函数打开一条线路设备并返回一个线路设备的句柄,这个句柄用于完成以后对这个设备的各种操作。

(5)转换电话号码:

使用lineTranslateAddress()将要拨打的号码转换成可以直接在计算机上拨打的号码格式。

(6)开始呼叫或是应答:

应用程序调用lineMakeCall()函数进行呼叫,调用完成后它将返回带有拥有者特权的呼叫句柄,此句柄可用在对该次呼叫所进行的进一步操作。

应用程序通过调用lineAnswer()函数来自动应答呼叫。

(7)挂断呼叫:

在呼叫完成后,lineDrop()函数将用来挂断呼叫,但是在上一步中得到的拥有者的呼叫句柄并不会因此释放,因为在呼叫被挂断以后,呼叫的句柄还有可能被用在一些后续的操作中。

可以通过lineDeallocate()来释放呼叫句柄。

(8)关闭线路设备:

应用程序调用lineClose()函数来关闭被lineOpen()函数打开的线路设备,如果一条线路被应用程序打开后始终没有被关闭,那么其它的应用程序将无法访问该线路。

(9)结束TAPI的使用:

在一切有关TAPI的操作完成之后,调用lineShutdown()函数来终止TAPI的使用,它会隐含地关闭所以打开的线路设备。

根据TAPI的开发基本思路整个程序的设计思路流程如图3

图3程序流程图

3.2各功能模块的设计

3.2.1TAPI的配置阶段

TAPI的置阶段配置阶段包括对线路的配置和对MODEM的配置,只有正确地配置并打开线路设备之后,才能对MODEM进行配置。

以下函数完成对TAPI的配置:

TAPI类成员函数telephonylnitialize分配支持逻辑线路设备的使用所必须的某些内部资源,并返回应用程序一个TAPI句柄,同时传递了一个回调函数的地址作为参数,此函数处理对整个线路状态进行处理。

然后使用TAPI的类成员函数lineNegotiateAPIVersion与Windows协商TAPI版本。

TAPI类成员函数mylineGetDevCaps获得有关逻辑线路的性能的信息Windows把这些信息填充到一个名为LINEDEVCAPS的只读结构中,应用程序检查这个结构就可以了解哪些设置是驱动程序所允许的TAPI类成员函数lineOpen打开线路。

3.2.2TAPI的连接阶段

TPAI在连接阶段MODEN会产生很多消息,消息的处理TAPI由回调函数进行消息处理,回调函数在初始化TAPI时创建,消息的处理在TAPI的使用过程中是至关重要的。

以下是一些主要的消息

(1)LINECALLSTATE_IDLE没有呼叫,为空,此时应断接,释放掉占用的资源;

(2)LINECALLSTATE_DIALING拨号中,正在拨号。

(3)LINECALLSTATE_BUSY线路忙或设备忙,此时应断接,释放掉占用的资源。

(4)LINECALLSTATE_SPECIALINFO特别的消息,此时应断接,释放掉占用的资源;

(5)LINECALLSTATE_OFFERING应答方已收到呼叫方信号,此时应进行应答,调用lineAnswer函数;

(6)LINECALLSTATE_CONNECTED已连接成功,此时可进行数据的传输,但必须先得到MODEM的句柄

(7)LINECALLSTATE_DISCONNECTED已断接,此时应释放掉占用的资源。

TAPI类成员函数MakeCall被用于发起呼叫,产生呼叫后依次进入图4状态:

 

图4状态流程图

新生成的呼叫处于IDLE状态,随后依次进入PROCEDING,OFFERING,CONNECTED和DISCONNECTED最后回到IDLE状态。

这些状态都通过在调telephonylnitialize函数初始化TAPIDLL的时候传递的回调函数来处理。

3.2.3数据传送阶段

TAPI并不提供数据传输的函数。

因为MODEM通过控制计算机串口来进行通信,所以MODEM的数据通信与串口数据通信的方法一样,采用ReadFile和writeFile函数来接收数据和发送数据。

传送数据的时候要用到MODEM的句柄,此时调用TAPI的类成员函数lineGetID得到MODEN的句柄后就可以通过ReadFile和WriteFile函数来进行数据传输。

ReadFile与WriteFile有两种模式,一种是等待模

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2