用户服务器侦听程序US-Monitor运行在一台可以连接互联网的计算机上,不需要有固定的IP地址。US-Monitor的数据来自云服务器转发软件(CSFS)所以,US-Monitor的运行依赖于CSFS的运行。
在 US-Monitor 工程框架下有 4 个文件夹,分别是 01_Doc、02_Class、03_Form 和04_Resource,如表4-3所示。
表4-3 用户服务器侦听程序US-Monitor的工程框架
1.工程说明文件夹:01_Doc
工程说明文件夹下的 readme.txt 文档用来说明用户对工程在何时进行了哪些修改,以及修改后的工程实现了哪些功能。
2.工程类文件夹:02_Class
工程类文件夹存放的是工程使用到相关类,共包含 5 个类,分别是历史曲线类(DrawChart)、结构数据转换类(FrameData)、网络通信类(HCICom)、实时曲线类(Paint)和数据库操作类(SQLComand 类)。历史曲线类用来将历史数据进行曲线显示;结构数据转换类可以将数据转换为应用层方便处理的数据格式;网络通信类负责接收上行数据和发送下行数据,该类会对接收到的数据进行解帧,并把真实的数据传送到应用层,同时将应用层的数据组成帧并发送到指定地址;实时曲线类用来将实时数据进行曲线显示;数据库操作类可以将数据存储到数据库中或从数据库中读取需要使用的数据。
3.工程窗体文件夹:03_Form
工程窗体文件夹存放的是应用层的代码,可以有多个窗体。当有多个窗体时,应将主窗体放在03_00文件夹下,方便理解。在本工程中,该文件夹下共包含4个子文件夹,即1个主窗体、3个子窗体。
4.工程资源文件夹:04_Resource
工程资源文件夹存放的是主窗体中“帮助”菜单栏下的使用说明、程序说明和版本等的资源文件。
US-Monitor是基于云服务器转发程序实现的,了解云服务器转发程序的功能之后可以更好地理解US-Monitor的执行过程。
1.云服务器转发软件(CSFS)的功能
终端(UE)与用户服务器(US)之间的通信需要通过IP地址才能进行,而为每个终端或每个用户服务器分配一个固定的IP地址是不划算的。因此,本书采用了一个方法,使整套系统只需要一个固定的IP地址就能顺利运行。
在该IP地址对应的服务器上运行一个转发程序,即云服务器转发软件(CSFS)。所有的终端与用户服务器都会主动与转发程序建立连接,并通过转发程序进行上行或下行数据的转发。基于CSFS的通信流程在第3章的通信过程中已经给出,其具体功能如下:
(1)云服务器转发软件根据连接的端口号确定连接是来自终端还是用户服务器,从而进行转发。
(2)每个终端都有一个固定的IMSI,并包含在每一帧的发送数据中,云服务器转发软件根据帧中的IMSI确定这个连接来自哪一个终端。
(3)用户服务器发给云服务器转发软件的每一帧中也都带有一个IMSI,表示用户服务器想把该帧数据发给该IMSI对应的终端,云服务器转发软件根据该IMSI发送数据给对应的终端。
为实现上述功能,云服务器转发软件使用了 4.4 节将要讲述的通信接口类 HCICom,可使使用者能够通过IMSI直接发送TCP数据,而不需要理解Socket 的概念。关于HCICom的使用方法和接口将在4.4节中详细介绍,在此不再赘述。
2.US-Monitor的执行流程
在云服务器转发程序的基础上,利用US-Monitor即可接收数据与回发,其运行页面如图4-2所示。
图4-2 US-Monitor运行页面
启动US-Monitor之后,主要需要执行如下操作。
(1)程序首先从Program.cs运行,创建并启动FrmMain_Load主窗体。
(2)执行FrmMain_Load函数,生成显示主窗体,同时加载AHL.xml文件中的内容,并将其中的参数,如IMSI、目标地址、相关参数名等存入全局变量中,以便在侦听实时数据时动态地生成文本框。
(3)开启定时器,并加载运行FrmRealtime_Load实时数据窗体。
(4)执行 FrmRealtime_Load 函数,根据从 AHL.xml 文件中读取的信息,生成显示实时数据的页面,并与云平台转发程序建立连接。
(5)若接收到数据,则会触发数据接收处理程序,将有效数据解析后重新创建标签,并显示在界面上,同时存入本地数据库的上行表“Up”中。
(6)在接收到数据后的30 s内可以向终端回发数据(30 s之后,终端会自动断开连接),因此,需要使能“回发”按钮,30 s后禁用“回发”按钮。
(7)单击“回发”按钮,根据文本框里的内容更新结构体g_frmStruct,然后进行组帧并发送给云平台转发程序。单击“清空”按钮,清除文本框内的显示内容,等待接收下一帧数据。
(8)若无数据到来,则定时器每秒更新一次窗体显示的时间,每隔5 s向云平台转发程序发一次心跳包,防止TCP链接长时间无数据通信而断开。