论文部分内容阅读
摘要:文章介绍了建设发射机房运行监控系统的关键技术难题,及其解决思路和方法。解决了发射台机房运行监控系统在和其他系统交换数据过程中,因使用不同的编程语言,而产生不同的汉字编码带来的相互转换难题;并实现了系统接收数据包以后,把字符串按需求拆分还原出相应的数据;还攻克了因网络中断、或者服务器关闭等原因,而产生的Socket连接超时难题。
关键词:系统开发;编码转换;字符拆分;连接超时
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)21-0204-03
无线电台管理局近年在大力推进信息化建设,整合现有的发射机单机自动化系统、天线自动交换系统、以及机房辅助系统,优化发射台安全播出设备的自动化系统,提高安全播出效果。机房运行监控系统结构如图1所示:
机房运行监控系统的作用就是统一调度管理全机房的播出任务,接收、解析由上一级平台下发的调度令,调整运行图,协调发射和天线自动化系统进行播出;集中管理全机房设备,统一监控,根据发射机房设备的运行状态和运行信息,进行代播申请和系统运行方式设置,并将运行状态信息和故障信息,进行记录、汇总和管理 。下面就开发过程中遇到的关键技术难题,做一个初步探讨和解析。
1 编码转换
机房运行监控系统和发射机单机自动化系统、天线交换系统、机房辅助系统、上一级台平台进行数据交换,如果是不同编程语言开发的系统,就存在一个汉字编码转换问题。例如微软的C 默认的汉字编码方式是GB2312,而Sun公司的Java默认的汉字编码方式是UTF-8,在进行通信时如果数据包里包含汉字,而没有进行编码转换,对方接收到的数据就变成不可知的乱码,不能正确解析。如何在GB2312与UTF-8之间相互转换?很多资料上讲解的编码转换通常是用字符串的转换,来进行2进制的运算,这就涉及大量的I/O操作,效率比较低,使用起来也很不方便。发射机自动化系统发送的数据包实时性要求很高,且编码转换的工作量往往非常大,因此不得不考虑效率的问题。在GB2312和UTF-8互换的时候,首先需要先转换成UNICOD,然后再转换成GB2312或UTF-8。根据UTF-8一个汉字要用3个字节,而UNICODE只用2个字节;找出对应关系,进行位操作,即可达到目的。实现UTF-8和UNICODE之间的转换,就可用二进制运算,代替字符串的转换,从而使问题简单化。经过查找大量相关资料,反复测试,笔者用VC 编写了一个GB2312和UTF-8相互转换函数。下面是UTF-8到GB2312具体的实现代码,反过来也可以实现GB2312到UTF-8的转换。
void CChineseCodeLib::UTF_8ToUnicode(WCHAR*pOut,char *pText) // UTF-8转换成Unicode
{ char* uchar = (char *)pOut;
uchar[1] = ((pText[0]
关键词:系统开发;编码转换;字符拆分;连接超时
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)21-0204-03
无线电台管理局近年在大力推进信息化建设,整合现有的发射机单机自动化系统、天线自动交换系统、以及机房辅助系统,优化发射台安全播出设备的自动化系统,提高安全播出效果。机房运行监控系统结构如图1所示:
机房运行监控系统的作用就是统一调度管理全机房的播出任务,接收、解析由上一级平台下发的调度令,调整运行图,协调发射和天线自动化系统进行播出;集中管理全机房设备,统一监控,根据发射机房设备的运行状态和运行信息,进行代播申请和系统运行方式设置,并将运行状态信息和故障信息,进行记录、汇总和管理 。下面就开发过程中遇到的关键技术难题,做一个初步探讨和解析。
1 编码转换
机房运行监控系统和发射机单机自动化系统、天线交换系统、机房辅助系统、上一级台平台进行数据交换,如果是不同编程语言开发的系统,就存在一个汉字编码转换问题。例如微软的C 默认的汉字编码方式是GB2312,而Sun公司的Java默认的汉字编码方式是UTF-8,在进行通信时如果数据包里包含汉字,而没有进行编码转换,对方接收到的数据就变成不可知的乱码,不能正确解析。如何在GB2312与UTF-8之间相互转换?很多资料上讲解的编码转换通常是用字符串的转换,来进行2进制的运算,这就涉及大量的I/O操作,效率比较低,使用起来也很不方便。发射机自动化系统发送的数据包实时性要求很高,且编码转换的工作量往往非常大,因此不得不考虑效率的问题。在GB2312和UTF-8互换的时候,首先需要先转换成UNICOD,然后再转换成GB2312或UTF-8。根据UTF-8一个汉字要用3个字节,而UNICODE只用2个字节;找出对应关系,进行位操作,即可达到目的。实现UTF-8和UNICODE之间的转换,就可用二进制运算,代替字符串的转换,从而使问题简单化。经过查找大量相关资料,反复测试,笔者用VC 编写了一个GB2312和UTF-8相互转换函数。下面是UTF-8到GB2312具体的实现代码,反过来也可以实现GB2312到UTF-8的转换。
void CChineseCodeLib::UTF_8ToUnicode(WCHAR*pOut,char *pText) // UTF-8转换成Unicode
{ char* uchar = (char *)pOut;
uchar[1] = ((pText[0]