免费预览已结束,剩余31页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
厦门大学软件学院毕业论文本科毕业论文(科研训练、毕业设计)题 目:SIP话机TELNET服务器实现姓 名:学 院:软件学院系:专 业:软件工程年 级: 学 号: 指导教师(校内): 职称: 指导教师(校外): 职称: 年 月SIP话机TELNET服务器实现【摘要】 随着语音,互联网等技术的不断发展,VOIP这种低话费,高通话质量的话机已被越来越多的人所接受。其中基于SIP协议的VOIP技术一直受到设备生产商的关注,主要是因为该协议具有可扩展特性,可以轻松定义并迅速实现新功能。而通过TELNET协议,我们可以轻松的对SIP话机进行各种的功能设置。TELNET协议对SIP话机的新功能的实现,以及维护都带来了极大的方便。本文主要讨论了在SIP话机上如何实现TELNET服务器,以及对TELNET服务器进行功能上的改进,提高TELNET服务器的处理效率,使得用户可以更方便的使用TELNET服务器功能来对话机进行各种功能设置。首先,本文先介绍了TELNET协议的相关内容;对在RFC854中规定的TELNET协议规范进行说明,包括实现TELNET所必需的三部分:虚拟终端、协商选项、状态机;同时简单说明SIP话机的相关知识。然后,对基于VxWorks操作系统的网络编程进行简单的介绍。最后,详细说明TELNET服务器在SIP话机上的实现过程和具体的实现方法,对TELNET服务器功能的改进,以及对本次工作的总结。【关键字】 TELNET 功能改进 TELNET协议【Abstract】 Nowadays, with the developing of phonetic technology and internet, more and more people have accepted the VOIP telephone which has cheap telephone fees and high communicating quality. The VOIP technology based on SIP protocol always gets the attention of the equipment manufactories, the main reasons are its expansibility and the easiness of definition as well as realizing new functions rapidly. With the help of TELNET protocol, we can set many new functions for the SIP phone. TELNET protocol makes it much easier to set new functions for the SIP phone and maintains the SIP phone.This paper mainly discusses how to implement the TELNET server in the SIP phone, and the amelioration of the TELNET functions, this will increase the efficiency of the TELNET server, and makes the user set the SIP phone easier.First, this paper introduces something about the TELNET protocol and then explains the criterion of the TELNET protocol of the RFC854. It also includes three needed parts to implement the TELNET. They are virtual terminal, negotiation options and state machine. As well this part explains something about the SIP phone simply.Second, this paper introduces the network programming based on the VxWorks Operating System simply. Finally, this paper gave a detail description of how to implement the TELNET server in the SIP phone. It also makes discuss of the development of the TELNET functions. In the end, I summed up this work.【Keywords】 TELNET function development TELNET protocol目录第一章引言6第二章实现TELNET模块的基础技术知识和话机相关知识介绍72.1TELNET协议简介72.1.1远程网络终端协议TELNET介绍72.1.2TELNET的条件和用途82.1.3TELNET协商机制82.1.4TELNET命令结构92.1.5已定义的TELNET的基本命令92.1.6TELNET协议中的子谈判机制102.1.7TELNET协议的数据传输112.1.8TELNET状态机112.2VxWorks操作系统网络编程基础知识122.2.1VxWorks操作系统的网络架构122.2.2VxWorks操作系统中面向连接的协议调用132.2.3本文中涉及的VxWorks操作系统中的固有网络编程函数132.3话机相关知识介绍14第三章TELNET模块具体的实现过程163.1建立TELNET连接163.1.1初始化TELNET163.1.2对生成的套接字描述符进行确认163.2TELNET协商过程173.3对键盘按键消息的处理183.4命令的执行过程193.5关闭TELNET连接203.6TELNET模块流程总结20第四章对TELNET的功能改进214.1TELNET模块中命令查找功能的添加214.1.1TELNET模块命令查找的缺陷214.1.2TELNET模块中的命令查找功能的需求224.1.3命令查找功能的实现224.2TELNET模块中共通参数处理功能的添加284.2.1TELNET模块中参数处理功能的缺陷284.2.2TELNET模块中参数共通处理的需求284.2.3TELNET模块中参数的处理方法284.2.4TELNET模块中参数共通检验功能的实现28结论. 33致谢语. 34参考文献.35ContentsChapter 1Introduction6Chapter 2Something Aboout How To Implement TELNET Server72.1TELNET Protocol Brief Introduction72.1.1TELNET Protocol Introduction72.1.2The Condiction And Use Of TELNET82.1.3The Negotiation Of TELNET82.1.4The Order Configuration Of TELNET92.1.5TELNET Basic Order92.1.6TELNET Negotiation102.1.7Transfers Of Data In TELNET Protocol112.1.8TELNET State Machine112.2Basic Knowledge Of VxWorks Operating System122.2.1The Network Configuration Of VxWorks Operating System122.2.2The Protocol Used In VxWorks Operating System132.2.3Some Function Of VxWorks Operating System In This Paper132.3Some Knoeledge About Phone14Chapter 3How To Implement TELNET Server163.1Create TELNET Connection163.1.1Initialize TELNET163.1.2Check SOCKET163.2How To Put Up TELNET Negotiation173.3Manage The Keyboard Event183.4How To Put Up Orders193.5Close TELNET Connection203.6TELNET Flow20Chapter 4The Betterment Of TELNET Server214.1Add The Function Of Lookup Order In TELNET Server214.1.1Limitation In TELNET Server About Searching Order214.1.2The Requirement Of TELNET Server About Searching Order224.1.3How To Implement The Function Of Searching Order224.2Add The Function Of Function Management In TELNET Server284.2.1Limitation In TELNET Server About Function Management284.2.2The Requirement Of TELNET Server About Function Management284.2.3How To Manage The Parameter In TELNET Server284.2.4How To Implement The Function Of Function Management28Conclusion.33Acknowledgement.34References35第一章 引言随着互联网,语音,多媒体等技术的不断发展与完善,如今,VOIP(网络电话)这种低话费,通话质量也不差的话机已开始被广大消费者及企业用户所接受。据咨询机构Frost & Sullivan分析师乔恩阿诺德透露,仅在美国就有50万VOIP用户, 2008年底,VOIP用户有望会扩大到1650万户。VOIP是未来电话的发展趋势。对VOIP电话机的数据设定,主要实现话机的多功能,多样化,满足不同用户的各种需求。为了最大限度的满足不同的用户,使得使用VOIP电话机的用户越来越广泛,话机的功能也必须多样化。然而,话机上的功能按钮不可能随着功能的增多而无限度的加多。因此,要在有限的按钮上实现对如此多的功能设置,就必须通过按钮的组合及多重嵌套来实现。如此一来,用户在使用话机时未免觉得有些繁琐,不易设置操作,这样话机也不易被广大用户所接受。因此,通过TELNET协议,建立起话机与本地计算机的连接,编写话机设定命令,通过命令对话机数据直接进行设置,这无疑解决了话机功能多,按钮少所带来的问题。使用TELNET进行话机数据设定可以直接的设置大量的复杂数据,可以方便的了解命令的作用,在配置话机时如果出错有提示信息。但是普通的TELNET使用起来有诸多的不便,因此,对TELNET功能模块的改进和完善,将有助于用户更加方便地进行话机的功能设置。本文的第一章介绍实现TELNET模块所需要用到的基本技术知识(包括TELNET协议,VxWorks网络编程基础知识以及SIP话机的相关知识);第二章主要介绍TELNET模块的具体实现过程;第三章介绍了对TELNET模块的功能改进。第二章 实现TELNET模块的基础技术知识和话机相关知识介绍2.1 TELNET协议简介2.1.1 远程网络终端协议TELNET介绍TELNET程序使用TELNET协议提供给本地主机一个接口,通过该接口终端用户可注册到网络的其他主机上。它可能是今天最广泛实现的应用层协议之一。TELNET的第一个目标是定义网络虚拟终端(NVT)。NVT是一种标准的假想的参考设备。TELNET在网络发送时将真实的终端特征翻译成NVT特征,然后在到达目的地主机时在把NVT特征翻译成真实终端特征,这样只需要从真实终端到虚拟终端的一种翻译,而用不着在每一种真实终端之间进行翻译。TELNET 的第二个目标是允许客户方的进程就不同的选择进行协商。利用选项协商可以方便地在网络上使用不同特征的终端。在协商时,连接的一方可以向对方声明它所要求支持的选项,连接的另一端只需要回答是接受还是拒绝这一提议。TELNET的第三个目标是平等地对待连接的两端,即远程登录。所谓远程登录,就是指用户以仿真终端的形式登录到一个远程主机上,通过本地键盘和显示器与远程主机进行交互,查看远程主机上的资源,效果就好像用户的键盘和显示器直接与远程主机连接在一起一样。本文所讨论的TELNET是提供远程登录服务的客户端网络应用程序。从本质上讲,TELNET是一个基于网络的终端仿真程序,即把用户使用的终端或主机变成了远程主机的仿真终端。换言之,利用TELNET,客户就像远程系统本身的用户那样来访问该系统的资源。而且,TELNET连接的两端都可以平等地协商选项TELNET连接如图21所示。它采用客户/服务器模型。图21 TELNET连接示意图通常在服务上有一个进程负责接受到来的TELNET连接请求。在UNIX系统中,这一进程称为TELNET客户方计算机则运行一个称为TELNET的程序,该程序负责与指定的服务器建立连接。2.1.2 TELNET的条件和用途连接双方的主机都必须装有包括TELNET在内的TCP/IP协议族,而且登录用户必须预先知道远程系统的IP地址或者域名以及用户的登录标识和命令TELNET是很多Internet应用程序的基础,利用它TELNET可以访问工TELNET网上所有的数据库,联机游戏、对话服务和电子公告牌等。针对于本论文所讨论的是通过TELNET配置IP多功能电话机的设置数据。IP多功能话机将许多话机配置数据保存在FLASH ROM中。比如话机IP地址,话机子网掩码,Domain名,用户名,密码,呼叫控制服务器IP地址,DHCP服务器IP地址,SNTP服务器IP地址等等。目前这些数据通过话机的盘面操作写入FLASH ROM中,并在话机启动过程或者话机操作过程中被从FLASH ROM中读出。由于盘面是通过菜单进行选择,当配置数据太多,菜单选择将变得非常繁琐。另外也为了提供给用户更自由的配置方式。因此需要添加TELNET命令处理模块。这个模块接收到客户端的TELNET命令,进行解析,回显。同时将解析出的数据存入FLAHROM中。2.1.3 TELNET协商机制主机都希望能够在NVT之上提供更多的服务,而用户也将会拥有一个更复杂的终端,并且希望能够得到一流的,而不是极少的一点服务。尽管相互独立,但建立在TELNET协议中的是许许多多的“选项”,这些选项将被用来认可及同“DO,DONT,WILL,WONT”结构一起使用允许用户和服务器同意在他们的TELNET连接上使用更精致的协议集合。建立选项使用的基本策略,是让每一方初始化一个使一些选项有效的请求,另一方可以接受或拒绝该请求。如果该请求被接受了,选项立即生效;如果该请求被拒绝,连接的另一端仍然保留NVT的特性。WILL XXX由双方发送出去,表示该方希望(提出)开始对选项XXX进行处理。DO XXX和DONT XXX表示它的肯定和否定回应;类似地,DO XXX发送出去指示(请求)对方(也即DO的接收者)开始对选项XXX进行处理,WILL XXX和WONT XXX表示肯定和否定回应。2.1.4 TELNET命令结构所有的TELNET命令至少包含一个两个字节的序列:跟在命令的代码的后面,“当作命令来解释(Interpret as Command)”(IAC)的转义字符。处理选项谈判的命令有三个字节系列,第三个字节就成了被选项引用的编码。2.1.5 已定义的TELNET的基本命令基本的TELNET命令请参考表21,这些代码和代码序列只有在前面跟有一个IAC时才有意义。表21 TELNET的基本命令1名称代码意义EOF236文件结束符SUSP237挂起当前进程ABORT238中止进程EOR239记录结束符SE240子谈判结束符NOP241空操作Data Mark242一个同步信号的数据流部分。该命令的后面经常跟着一个TCP紧急通知Break243NVT的BRK字符(终止)Interrupt Process244IP功能(终止进程)Abort output245AO功能(终止输出)Are You There246AYT功能(请求应答)Erase character247EC功能(终止符)Erase Line248EL功能(擦除一行)Go ahead249GA信号(继续)SB250表示后面所跟的是对需要的选项的子谈判WILL (option code)251表示希望开始使用或者确认所使用的是指定的选项(协商选项)WONT (option code)252表示拒绝使用或者继续使用指定的选项(协商选项)DO (option code)253表示一方要求另一方使用,或者确认你希望另一方使用指定的选项(协商选项)DONT (option code)254表示一方要求另一方停止使用,或者确认你不再希望另一方使用指定的选项(协商选项)IAC255Data Byte 2552.1.6 TELNET协议中的子谈判机制子谈判机制是TELNET协议中非常重要的一个机制。在主机之间传递选项时,除了一个选项编码外可能还需要更多其他信息。例如,要求一个参数的那些选项就属于这种情况。在主机之间传递除了选项代码外的其他信息的策略包含两个步骤:双方都同意去“商讨”该参数,第二,对参数进行“商讨”。在第一步中,同意去讨论参数以一种普通的方式来进行。一方通过发送一个带有选项代码的DO(或WILL)命令来建议使用选项,另一方发送一个带有选项代码的DO(或WILL)命令来表示接受这个建议。一旦双方都同意使用这选项,通过在SB命令的后面跟上相应的选项代码,参数和命令SE来开始子谈判。每一方都被假设为能够解析该参数。因为在最初通过交换WILL和DO命令,双方都表明可以支持该选项。另外,即使接收方不能解析该参数,接收方也可以通过搜索SE命令(如字符串IAC SE)来定位参数字符串的结束位置。当然,在任何时候,任何一方都可以给另一方发送WONT或DONT来拒绝继续进行进一步的子谈判。例如,对需要进行子谈判的选项“ABC”来说,TELNET的格式为:IAC WILL ABC:提议使用选项ABC(或者赞成另一方使用该选项的请求)IAC DO ABC:要求另一方去使用选项ABC(或者赞成另一方使用该选项的提议)IAC SB ABC IAC SE:子谈判的一步,双方都要使用22.1.7 TELNET协议的数据传输在本地缓冲空间允许的可用范围内,可以在产生数据的机器上汇集数据,直到完整的一行数据已经准备好传输,或者某些在局部定义的信号明确地要求传输数据。这些信号既可以有进程产生,也可以有用户发出。当一个过程已完成向一个NVT打印机发送数据,并且输入队列中也没有来自NVT键盘,需要进一步进行处理的数据(就是说,当一个在TELNET连接的一端的过程无法在另一端没有数据输入的情况下进行处理),该过程必须传输TELNET的继续命令。2.1.8 TELNET状态机TELNET状态机描述了各个状态之间的转换关系,通过协商选项实现各个状态的转换。TELNET状态机的状态转换流程请参看图22。图22 TELNET状态机由上图我们可以很清晰的看出TELNET协议中各个状态转换的过程以及需要用到的协商选项。2.2 VxWorks操作系统网络编程基础知识2.2.1 VxWorks操作系统的网络架构MUX:MUX位于数据链路层与网络层之间,但不是一个新的层,它的目的是提供一个接口,隔离网络接口驱动和网络业务。IP:IP实际上是一种数据报通信协议,是一种尽力而为的业务,实现主机到主机的数据传送。UDP:用户数据报协议,它也是一种尽力而为的服务,对数据进行校验。TCP:传输控制协议,它提供可靠的字节流传送,并控制流量和拥塞。Sockets:它允许运行在VxWorks或其他主机环境下的任务之间相互通信。RPC:远程调用,运行一个任务唤醒实际运行在另一台机器上的过程。远程文件访问:VxWorks任务通过NFS协议,FTP协议,TELNET协议等访问远程主机上的文件。VxWorks操作系统的网络架构请参见图23。图23 VxWorks操作系统的网络结构32.2.2 VxWorks操作系统中面向连接的协议调用在VxWorks中实现TELNET协议就是基于图24的结构模型。图24 VxWorks中的协议调用32.2.3 本文中涉及的VxWorks操作系统中的固有网络编程函数创建套接字:int socket( domain, type, protocol )套接字的绑定:STATUS bind( int s, struct sockaddr* name, int namelen )套接字的监听:STATUS listen(int s, int backlog )接字等待连接: int accept( int s, struct sockaddr* addr, int* addrlen )套接字的连结:STATUS connect(int s, struct sockaddr* name, int namelen )套接字发送数据:int send(int s, char* buf, int buflen, int flags )套接字的数据接收:int recv( int s, char* buf, int buflen, int flags )关闭套接字:STATUS closesocket( int fd )2.3 话机相关知识介绍终端和话机进行通信的方式主要有两种,一种是通过串口和超级终端进行通信,还有一种是通过网络端口和TELNET程序进行通信。在TELNET中,字符在TELNET程序窗口上的显示是通过send()函数来实现的。而通过串口进行通信时,通信的内容可以使用printf()函数在超级终端上显示。两种通信方式请参见图25,图中给出输入相同字符条件下,二者显示上的不同。图25 TELNET程序窗口和超级终端窗口的对照图由上图我们可以看出,当输入一个字符“s”并按下回车后,超级终端窗口和TELNET程序窗口所显示的完全不同。因此,超级终端常作为调试窗口。第三章 TELNET模块具体的实现过程3.1 建立TELNET连接3.1.1 初始化TELNET对TELNET模块的初始化过程主要是创建一个套接字,同时生成一个套接字描述符。对TELNET进行初始化,主要使用到两个函数:void init_socket()和void init_telnet()。3.1.2 对生成的套接字描述符进行确认通过固有函数 int select()和 int accept()对生成的socket描述符进行确认。如果,出错,则调用函数exit_program()重新进行初始化。确认成功后进入TELNET协商过程。TELNET的初始化请参见图31。图31 TELNET初始化过程3.2 TELNET协商过程TELNET的协商机制已经在上文中进行了说明,这里就不在重复。程序中使用函数static int negotiation()进行TELNET的协商。话机首先向终端(也就是我们的个人电脑)发送两个消息: IAC, WILL, ECHO 和 IAC, WILL, NOGOAHEAD 。这两个消息的意思分别是:“话机向终端发送回显的请求”,“话机向终端发送不需要继续进行子谈判的请求”。话机通过函数static int negotiation_IAC()来接受来自于终端的消息。如果终端发送的是IAC的协商消息,则话机将不断调用该函数,直到话机收到了来自于终端键盘的按键消息,话机将终止协商,进入按键消息的处理。TELNET协商过程请参考图32。图32 TELNET协商过程3.3 对键盘按键消息的处理程序中通过函数static int negotiation()来实现对键盘按键消息的处理。键盘按键消息包括了“回车字符”(n或是r)、“退格字符”(b)和 “其余的普通字符”三种。函数通过switch语句分别对这三种字符进行处理。其中,“回车字符”表示输入已完成,转入命令处理。程序通过函数split_line()对输入的键盘字符进行分隔,将命令名和参数分开。便于程序下一步对命令的处理。TELNET模块对按键消息的处理流程请参见图33。图33 键盘按键消息处理3.4 命令的执行过程话机中的命令系统分为“SIP命令”和“非SIP命令”。“SIP命令”存放在FLASHROM中,而“非SIP命令”存放在EEPROM中。话机命令的执行过程就是对EEPROM和FLASHROM中具体数值的修改过程。命令执行的起始函数是exec_command(),程序通过对键盘按键消息的处理,将输入的字符串分隔成“命令名”“参数1”“参数2”“参数N”的格式。程序会先对“命令名”进行检测。如果不存在该命令,程序会返回negotiation()函数,重新开始对键盘消息进行处理;如果存在该命令,再调用具体的执行函数,对参数进行检测。如果参数出错,函数也将返回negotiation()函数,重新开始对键盘消息进行处理;如果参数正确,执行该命令,再进行EEPROM或是FLASHROM的烧写工作后,返回negotiation()函数,准备进行一下条命令的处理。命令的执行过程请参考图34。图34 命令执行过程3.5 关闭TELNET连接我们可以通过命令“exit”来关闭TELNET连接。输入该命令后,程序将执行函数exec_cmd_exit()来关闭TELNET连接,并返回函数telnet_main()。3.6 TELNET模块流程总结从上文中可以了解到,TELNET模块的一次完整的执行过程包括了:建立TELNET连接;进行TELNET协商;对键盘消息的处理;执行TELNET命令;关闭TELNET连接,这五个部分。TELNET模块的整体流程可以用图35进行简单的表示。图35 TELNET模块整体简略流程图第四章 对TELNET的功能改进4.1 TELNET模块中命令查找功能的添加4.1.1 TELNET模块命令查找的缺陷在TELNET中,由于存在有大量的有关于话机设置的命令,当用户对命令不熟悉的情况下,通过“help”命令来查找一条命令的全称相当麻烦。请参看图41。图41 执行HELP命令后显示的所有命令然后成功执行一条命令由上图我们可以看出,单纯的通过“help”命令来查找一条命令是相当困难的。4.1.2 TELNET模块中的命令查找功能的需求在TELNET模块中实现“敲入前缀字母或help + 空格前缀字母后通过Tab键,逐条搜索前缀字母或help + 空格前缀字母相匹配的命令。”这一功能可以极大的方便用户来查找自己希望使用的命令,对话机进行功能设置。例如,有五条命令:“setamdix”、“setauto”、“setautoans”、“setbackupdisp”、“setbklight”。输入了前缀字母“s”、“se”或是“set”后,按下Tab键,程序可以按照字符串的ASCII码值从小到大的顺序,逐条打印这五条命令,每按一次Tab输出一条命令。而如果用户如果输入了“seta”,则按顺序输出“setamdix”、“setauto”和“setautoans”这3条命令,每按一次Tab键输出一条命令。如果用户输入的是“help seta”后按下Tab键,则要按顺序显示“help setamdix”、“help setauto”和“help setautoans”这3条命令,每按一次Tab输出一条命令。4.1.3 命令查找功能的实现功能上的需要,我们不能将Tab键的缩进功能全都变成查找功能。输入的字符串将放在字符数组par中。图42中,列出了几种情况,在这几种情况下,按下Tab键将不进行命令的查找。图42 查找功能实现的条件通过以上的步骤,我们可以得出能够进行命令查找的字符串。这些字符串的特征就是:由一连串中间不存在分隔符的字符构成的字符串,形如:“setamdix”;或是由“help空格一连串中间不存在分隔符的字符构成的字符串”构成的字符串,形如:“help setadmix”。在程序中,我们需要将命令名按照其ASCII码值按从小到大的顺序进行排序。生成的字符串数组如图43所示。图43 排好序的命令名集合将已有的命令排好序后,下一步就是对达到条件的字符串进行命令查找。当用户输入一串字符之后,按下Tab键,程序流程将进入函数search_seqMain(),程序会将输入的字符串和排好序的字符串数组中的每个字符串进行比较,例如,如果输入的字符串是“set”,则程序将会找出所有以“set”开头的命令,根据上图,则是从命令“set180sdp”到命令“setvlan”之间的字符串(包括“set180sdp”和“setvlan”这两个字符串)。当前,程序将在用户TELNET程序端删去“set”字符串,并打印出“set180sdp”这个字符串。下一步,程序将等待用户的下一次输入。如果用户再次按下Tab键,程序将删去“set180sdp”这个字符串,输出“setamdix”这个字符串;如果用户按下了退格键,则程序将删去字符串中的字符“p”并且将以“set180sd”为前缀重新查找一次以“set180sd”为开头的字符串,根据上图,则只有“set180sdp”这个字符串;如果用户输入的回车键或是空格键,函数将返回至函数negotiation(),并返回查找成功的消息;如果用户输入的是其他的字符,则程序将显示出该字符,例如,用户输入了字符“a”,则程序将显示出字符串“set180sdpa”,并且以此为前缀搜索字符串数组,根据上图可知,没有以“set180sdpa”为开头的字符串。图44、图45和图46,分别显示输入字符串“se”,按下“Tab”键,再按下“回车”键时,TELNET程序界面上所显示的消息。图44 输入字符串“se”图45 按下“Tab”键后TELNET界面上的显示图46按下“回车”键后TELNET界面上的显示实现该功能所用到的函数及其接口见表41,图47显示出该功能的实现流程。表41 命令查找过程中使用的函数说明函数名接口接口描述int search_seqMain(char par,char* ch,int asd)int asd文件描述符char par用户输入的字符串char* ch检测用户最新输入的字符int search(int asd,int orderLen,char par,char* ch)int asd文件描述符char par经过处理的用户输入的字符串char* ch检测用户最新输入的字符int orderLen经过处理的用户输入的字符串的长度int findFirstorder(char par)char par经过处理的用户输入的字符串int findLastorder(char par,int beginNum)char par经过处理的用户输入的字符串int beginNum函数findFirstorder()的返回值int compareString(char a,char b,int len)char a字符串achar b字符串bint len需要比较的2个字符串的前len位图47 查找功能实现的流程4.2 TELNET模块中共通参数处理功能的添加4.2.1 TELNET模块中参数处理功能的缺陷由图24,我们可以看出,当程序对输入的参数进行处理时,每处理一条TELNET命令都需要调用到该命令具体的实现函数,各个命令的参数检验没有共通性。造成大量重复代码。降低了程序的处理效率。也使得命令的扩展受到了限制。4.2.2 TELNET模块中参数共通处理的需求由于有以上的弊端,因此,希望能够对参数实现共通检验,今后扩展一条命令,只需提供如下接口:命令名,参数名,参数个数,参数类型,参数范围。这样有利于扩展命令和提高程序的处理效率。4.2.3 TELNET模块中参数的处理方法参数的共通检验功能,需要考虑到命令名,参数名,参数个数,参数类型,参数范围,参数标识符,参数输入顺序等等多个方面的问题,因此,实现参数共通处理之前,我们应该先了解各个实现函数中参数的处理方法。TELNET模块中,每个命令的实现函数中都包含了参数的检验和处理,因为,命令是由不同的程序员添加的,所以,对参数的检验方法各不相同。参数类型:参数类型分为数字型和字符型。数字型参数有一定的取值范围,例如:从0到7或是从2到4;字符型参数主要是判断字符串的长度,每个字符串都有一定的长度取值范围,例如:有的字符串要求长度为12到127;有的要求为8。参数个数:每个命令都有一定的参数个数的限制,例如,有的命令必须输入4个参数;但有的命令可以不输入参数,也可以输入1个或是2个参数。参数标识符:有的命令中输入参数时要带上标识符,例如:“r 0”这样的格式,“r”就是参数的标识符;有的参数输入之前可以不带标识符,例如:直接输入“1”这样的格式。参数输入顺序:有的命令中参数可以以任意顺序输入;有的命令中必须按照一定的顺序输入。4.2.4 TELNET模块中参数共通检验功能的实现虽然原TALNET模块中参数的处理方法没有统一的规范,但是还是可以将这些参数的处理方法进行整合,各个命令的参数规范可以使用一个结构体来表示。再检测输入的命令是否符合该结构体中的规范。结构体的具体定义和成员变量的作用请参看图48和表42。图48 表示参数规范的结构体表42 结构体中成员变量的作用成员变量名作用int orderNum该命令在结构体中的编号(改值对输入规范并不产生影响)char *orderName命令名char parameterTableparameterNmubercharNumber参数的类型,以及最大最小值。如果参数有标识符,也包含标识符的名称(其中“num”表示参数是数字型,后面的两个数字分别表示参数的最大最小值;“str”表示参数是字符型,后面的两个数字表示字符长度的最大最小值)int ordernumTable在数组parameterTable中,表示了几个参数int parameternumTable数组parameterTable中,字符串个数int parameter11参数个数的可能值int parameterNum数组parameter中,有几个值int flagSeq参数输入是否存在一定顺序。存在为1;不存在0int flagFlag参数输入是否需要标识符。需要为1;不需要为0结构体定义好后,就可以添加结构体的具体成员了。例如:7,userpass,str,6,6,1,3,0,1,2,0,0或者是形如11,sethotline,-t,num,0,1,-d,str,1,32,2,8,0,1,2,3,1,1这样就可以表示出一个命令的输入规范了。下面来说明一下参数的检验过程。参数检验功能的入口函数是函数exec_checkParameterMain(),该函数调用函数exec_checkParameter()对参数进行检验(参数的具体检验过程在函数exec_checkParameter()中实现,其间需要调用到函数chechParameterNumber()和函数checkParameterValue()),参数的输入分为三种情况:参数前不带有标识符;参数前带有标识符但参数输入不需要按一定的顺序;参数前带有标识符且参数输入需要按照一定的顺序。这一步主要是通过对结构体中的flagSeq和flagFlag两个成员变量进行检测来实现的。如果参数前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台风来袭安全措施介绍
- 大学生创新创业教育专题
- 电力工程造价从业人员专业能力评价考试(专业技术公共基础)考前模拟试题(安徽省宣城市2025年)
- 2026上半年湖北省武汉市东湖高新区工程系列专业技术职务水平能力测试(农学)训练题及答案
- 2026年一级建造师执业资格考试(建设工程项目管理)模拟试题及答案
- 2026年心理b证笔试试题及答案
- 2026年设备安装施工员《专业管理实务》题库及答案各地真题
- 2026年湖北省武汉市职称评审专业水平能力测试(农学)试题解析及核心考点
- 2026年湖北省路桥工程专业技术职务水平能力测试(工程勘察与测量初中级)仿真试题及答案
- 2026年备考检验类之临床医学检验技术(士)真题练习试题高频卷
- minitab17简单入门教学
- 焊接知识培训课件
- 春季高考历年真题-2026年天津市春季高考语文试卷
- 《Ubuntu Linux系统管理与服务器配置》中职全套教学课件
- 重庆市2025年初中学业水平考试地理试题及答案
- 化工垫片基础知识培训
- 2025年广东省初中学业水平考试语文试卷(含答案详解)
- 2025年水利三类人员b证考试题库及答案
- 供货组织计划方案
- 员工工地开放日活动方案
- 新生儿肛周脓肿的护理查房讲课件
评论
0/150
提交评论