CN101944025A - 基于python语言的tcp/udp数据的自动组包与解包的方法 - Google Patents
基于python语言的tcp/udp数据的自动组包与解包的方法 Download PDFInfo
- Publication number
- CN101944025A CN101944025A CN2010102858042A CN201010285804A CN101944025A CN 101944025 A CN101944025 A CN 101944025A CN 2010102858042 A CN2010102858042 A CN 2010102858042A CN 201010285804 A CN201010285804 A CN 201010285804A CN 101944025 A CN101944025 A CN 101944025A
- Authority
- CN
- China
- Prior art keywords
- data
- tcp
- udp
- transformational relation
- mapping table
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
一种基于PYTHON语言的TCP/UDP通讯数据包组包和解包方法,以XML文件形式定义通讯的数据结构,形成数据包与配置结构建立一一对应关系的转换关系映射表并且常驻内存,通过转换关系映射表完成组包和解包。组包的过程是根据转换关系映射表生成协议的各个字段的数据然后再组合起来形成一个完整的数据报文。解包过程是根据转换关系映射表把一个完整的数据报文拆分为若干字段。本发明大大加快了TCP/UDP数据通讯程序开发和测试的速度,使程序员更加专注于程序的业务逻辑的开发,而测试人员不需要一个字节一个字节的去对通讯的数据,可以提高测试的准确性及效率性。
Description
【技术领域】
本发明属于计算机软件通讯领域,具体是指一种基于PYTHON语言的TCP/UDP数据的自动组包与解包的方法。
【背景技术】
在计算机软件通讯领域,TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。UDP是与TCP相对应的协议,是一种无连接的协议,每个数据报都是一个独立的信息。TCP/UDP分别被应用到不到的领域,例如TCP应用在远程连接(Telnet)、超文本传输(HTTP)和文件传输(FTP);UDP应用在视频会议系统等。
目前基于TCP/UDP的通讯协议的组包和解包大部分都是程序代码中直接处理方法,收到数据时转到相应的协议处理器进行处理,需要编写每个协议的代码,而协议结构有变动时又要修改代码方能使用,非常的不灵活、且不易于系统的扩展;而对于处在调式和测试阶段的程序则更需要对协议一个字段一个字段的构造和分析,这个过程非常的繁琐和复杂且极易因为协议的复杂而造成构造和分析的出错。
【发明内容】
本发明所要解决的技术问题之一在于提供一种基于PYTHON语言的TCP/UDP数据的自动组包的方法,有效地提高了开发、测试TCP/UDP通讯的程序的效率。
本发明所要解决的技术问题之二在于提供一种基于PYTHON语言的TCP/UDP数据的解包的方法,有效地提高了开发、测试TCP/UDP通讯的程序的效率。
本发明采用以下技术方案解决上述技术问题之一:
一种基于PYTHON语言的TCP/UDP通讯数据包组包方法,其特征在于:以XML文件形式定义通讯的数据结构,形成数据包与配置结构建立一一对应关系的转换关系映射表并且常驻内存,通过转换关系映射表自动完成组包,具体步骤为:
步骤10:创建XML文件,定义不同通讯协议的转换关系;
步骤20:选择XML协议文件;
步骤30:指定组包的协议;
步骤40:程序根据指定的协议生成各相应字段的数据;
步骤50:把生成的各类型的数据根据各种规则组合并按要求编码形成通讯使用的TCP/UDP数据包。
所述步骤40还包括:根据XML协议定义自动生成固定字符、数值、日期类型的数据或随机生成字符、数值、日期类型的数据。
所述步骤50还包括:将生成的数据进行左右对齐,按需补齐,然后串接进行加密、压缩、编码形成通讯数据包。
本发明采用以下技术方案解决上述技术问题之二:
一种基于PYTHON语言的TCP/UDP通讯数据包解包的方法,其特征在于:以XML文件形式定义通讯的数据结构,形成数据包与配置结构建立一一对应关系的转换关系映射表,通过转换关系映射表自动完成解包,具体步骤为:
步骤100:创建XML文件,定义不同通讯协议的转换关系;
步骤200:选择XML协议文件;
步骤300:获取TCP/UDP通讯的数据包,粘贴到程序中;
步骤400:程序根据XML协议定义先把被编码过的数据还原;
步骤500:选择相应的协议去分析数据,把各字段的数据还原出来,完成数据的分析。
所述步骤400还包括:可以根据协议将获取的经过加密、压缩、编码的数据进行还原。
所述步骤500还包括:可以将还原的数据分解成各个类型的数据。
本发明的优点在于:使得开发人员可以不用处理复杂的数据构造,而只需要注重处理业务逻辑,增加程序的可扩展性和灵活性。不会因为通讯协议的修改去变动相应协议组包和分析的代码。测试人员也可通过组包和解包来模拟测试数据和分析测试结果,提高测试的准确性和效率性。使用XML文件定义,使开发人员、测试人员无需关心协议数据的组包和解析,大大简化了业务逻辑层编码工作,易于系统功能的扩展和测试。
【附图说明】
下面参照附图结合实例对本发明作进一步的描述。
图1是本发明中XML配置文件的作用表示图。
图2是本发明中组包和解包的程序流程图。
【具体实施方式】
PYTHON语言是一种面向对象、直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。
基于PYTHON语言的TCP/UDP数据的自动组包与解包的方法,将数据
包与配置结构建立一一对应关系的转换关系映射表,通过查映射表可实现不
同类型数据互转。转换关系映射表可通过多种形式创建,为便于在通讯数据
包发生改变时进行调整映射关系,可采用XML配置文件的方式。
以下展示了一份XML配置文件示例:
<?xml version=″1.0″encoding=″UTF-8″?>
<Protocol name=″GXT Protocol″>
<GoodsOrderMesUpload>
<OrderTime>
<datetype>datetime</datetype>
<type>1</type>
<cycle1>0</cycle1>
<begindate>20000101000001</begindate>
<enddate>20100101000001</enddate>
<outformat>%y%m%d%H%M%S</outformat>
<length>12</length>
<aligntype>1</aligntype>
<fill></fill>
</OrderTime>
<OrderSum>
<datetype>values</datetype>
<cycle1>3</cycle1>
<type>1</type>
<min>1</min>
<max>5</max>
<value>4</value>
<length>12</length>
<aligntype>3</aligntype>
<fill></fill>
</OrderSum>
<GoodID>
<datetype>string</datetype>
<cycle1>1</cycle1>
<type>1</type>
<length>8</length>
<infix>aaa</infix>
<aligntype>1</aligntype>
<fill></fill>
</GoodID>
<GoodSum>
<datetype>values</datetype>
<cycle1>1</cycle1>
<type>1</type>
<min>0</min>
<max>100</max>
<value>4</value>
<length>12</length>
<aligntype>3</aligntype>
<fill></fill>
</GoodSum>
</GoodsOrderMesUpload>
<GetGoodsOrderMesAnswer>
<OrderListAmount>
<datetype>values</datetype>
<cycle1>0</cycle1>
<cycle2>3</cycle2>
<type>1</type>
<min>1</min>
<max>6</max>
<value>4</value>
<length>12</length>
<aligntype>3</aligntype>
<fill></fill>
</OrderListAmount>
<OrderTime>
<datetype>datetime</datetype>
<type>1</type>
<cycle1>0</cycle1>
<cycle2>1</cycle2>
<begindate>20000101000001</begindate>
<enddate>20100101000001</enddate>
<outformat>%y%m%d%H%M%S</outformat>
<length>12</length>
<aligntype>1</aligntype>
<fill></fill>
</OrderTime>
<ShopsID>
<datetype>string</datetype>
<cycle1>0</cycle1>
<cycle2>1</cycle2>
<type>1</type>
<length>8</length>
<infix>aaa</infix>
<aligntype>1</aligntype>
<fill></fill>
</ShopsID>
<GoodsAmount>
<datetype>values</datetype>
<cycle1>3</cycle1>
<cycle2>1</cycle2>
<type>1</type>
<min>1</min>
<max>5</max>
<value>3</value>
<length>12</length>
<aligntype>3</aligntype>
<fill></fill>
</GoodsAmount>
<GoodsID>
<datetype>string</datetype>
<cycle1>1</cycle1>
<cycle2>1</cycle2>
<type>1</type>
<length>8</length>
<intix>aaa</intix>
<aligntype>1</aligntype>
<fill></fill>
</GoodsID>
<OrderAmount>
<datetype>values</datetype>
<cycle1>1</cycle1>
<cycle2>1</cycle2>
<type>2</type>
<min>0</min>
<max>1000000</max>
<value>4</value>
<length>12</length>
<aligntype>3</aligntype>
<fill></fill>
</OrderAmount>
</GetGoodsOrderMesAnswer>
</Protocol>
在上述所展示的XML示例文件中:名为“GXT Protocol”的协议中,定义了两个协议分别为“GoodsOrderMesUpload”和“GetGoodsOrderMesAnswer”,其中两个协议各有不同的字段。每个字段都有datetype属性,type属性,length属性,aligntype属性和fill属性。Datetype属性共有3个值,分别为string字符串、values数值和datetime日期,用来作为调用相应数据的处理函数的标记;Type属性共有3个值,分别为1、2、3用来指定不同的数据类型生成方式,有固定值、随机取值和文件读取值等;Length属性表示数据的长度;Aligntype属性代表数据的对齐方式,有左对齐、左对齐和中间对齐。Fill表示不足长度时数据的填充内容。并且根据数据类型的不同还有min、max、begindate、enddate等属性分别用于标识数值型、日期型数据的取值区间;outformat属性用于指定日期型数据的输出格式。实际上,在以上的通讯协议中,除了描述字段性质的属性还有控制字段行为的属性,如cycle,用于控制字段在协议中是否要循环重复以及循环的次数。至此,得到的一份XML配置文件不仅包含了字段数据类型转换信息,同时包含了字段数据类型的行为控制信息。图1展示了XML配置文件的作用。
以下汇总了XML文件处理的主要接口函数:
def AnalysisXml(xml):#分析XML文件返回LIST
def Mainpack(list,msgid):#根据循环标志选择组包方法
defPack(list=[],msgid=″):#处理没有循环标志的协议
defPackcycle1(list=[],msgid=″):#处理没有循环标志的协议
defPackcycle2(list=[],msgid=″):#处理没有循环标志的协议
def Mainunpack(list,msgid):#根据循环标志选择解包的方法
defunpack(list=[],msgid=″):#处理没有循环标志的协议
defunPackcycle1(list=[],msgid=″):#处理没有循环标志的协议
defunPackcycle2(list=[],msgid=″):#处理没有循环标志的协议
#以下为生成数据的接口函数
def ProValues(type=1,limit1=0,limit2=100,value=0,aligntype=1,fill=′′,len=10):#按规则生成数值型数据的函数
def ProString(self,type=1,length=50,infix=′AAA′,aligntype=1,fill=″):#按规则生成字符型数据的函数
def
ProDatetime(self,type=1,begindate=″20000101000001″,enddate=″20100101000001″,outformat=″%Y%m%d%H%M%S″,aligntype=1,fill=″,length=30):#生成日期型数据的函数
参照说明书附图和具体实施例对本发明的基于TCP/UPD通讯的数据包的组包和解包的方法作以下详细地说明:
具体实施例:
本发明的一种基于TCP/UPD通讯的数据包的组包和解包的方法,在供销通系统中进行了实施。供销通系统中有商品下载协议、商品订单协议等。应用此发明将商品订单协议的数据进行组包和解包。如图2所示。
具体步骤为:
一、组包过程
1)将需要转换的协议定义为XML文件,XML格式如上文的示例;
2)程序载入XML数据并经过分析处理返回LIST数据类型,选择指定要组包的协议;
3)根据选定的协议,生成各个字段的数据;
4)再根据协议规则组合数据,生成要求的协议通讯数据包。
二、解包过程
1)获取需要的解包数据;
2)程序根据数据包及协议自动把数据数据包拆分为协议对应的各个字段数据;
3)把拆分的各个字段数据根据协议进行处理还原、分析。
本发明使得开发人员可以不用处理复杂的数据构造,而只需要注重处理业务逻辑,增加程序的可扩展性和灵活性。不会因为通讯协议的修改去变动相应协议组包和分析的代码。测试人员也可通过组包和解包来模拟测试数据和分析测试结果,提高测试的准确性和效率性。使用XML文件定义,使开发人员、测试人员无需关心协议数据的组包和解析,大大简化了业务逻辑层编码工作,易于系统功能的扩展和测试。
Claims (6)
1.一种基于PYTHON语言的TCP/UDP通讯数据包组包方法,其特征在于:以XML文件形式定义通讯的数据结构,形成数据包与配置结构建立一一对应关系的转换关系映射表并且常驻内存,通过转换关系映射表自动完成组包,具体步骤为:
步骤10:创建XML文件,定义不同通讯协议的转换关系;
步骤20:选择XML协议文件;
步骤30:指定组包的协议;
步骤40:程序根据指定的协议生成各相应字段的数据;
步骤50:把生成的各类型的数据根据各种规则组合并按要求编码形成通讯使用的TCP/UDP数据包。
2.如权利要求1所述的基于PYTHON语言的TCP/UDP通讯数据包组包方法,其特征在于:所述步骤40还包括:根据XML协议定义自动生成固定字符、数值、日期类型的数据或随机生成字符、数值、日期类型的数据。
3.如权利要求1所述的基于PYTHON语言的TCP/UDP通讯数据包组包方法,其特征在于:所述步骤50还包括:将生成的数据进行左右对齐,按需补齐,然后串接进行加密、压缩、编码形成通讯数据包。
4.一种基于PYTHON语言的TCP/UDP通讯数据包解包的方法,其特征在于:以XML文件形式定义通讯的数据结构,形成数据包与配置结构建立一一对应关系的转换关系映射表,通过转换关系映射表自动完成解包,具体步骤为:
步骤100:创建XML文件,定义不同通讯协议的转换关系;
步骤200:选择XML协议文件;
步骤300:获取TCP/UDP通讯的数据包,粘贴到程序中;
步骤400:程序根据XML协议定义先把被编码过的数据还原;
步骤500:选择相应的协议去分析数据,把分析的数据展示出来,完成数据的分析。
5.如权利要求4所述的基于PYTHON语言的TCP/UDP通讯数据包组包方法,其特征在于:所述步骤400还包括:可以根据协议将获取的经过加密、压缩、编码的数据进行还原。
6.如权利要求4所述的基于PYTHON语言的TCP/UDP通讯数据包组包方法,其特征在于:所述步骤500还包括:可以将还原的数据分解成各个类型的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102858042A CN101944025A (zh) | 2010-09-16 | 2010-09-16 | 基于python语言的tcp/udp数据的自动组包与解包的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102858042A CN101944025A (zh) | 2010-09-16 | 2010-09-16 | 基于python语言的tcp/udp数据的自动组包与解包的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101944025A true CN101944025A (zh) | 2011-01-12 |
Family
ID=43436026
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010102858042A Pending CN101944025A (zh) | 2010-09-16 | 2010-09-16 | 基于python语言的tcp/udp数据的自动组包与解包的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101944025A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104767729A (zh) * | 2015-02-10 | 2015-07-08 | 上海创景计算机系统有限公司 | 通信数据协议构造与分解系统及方法 |
CN106339249A (zh) * | 2016-08-23 | 2017-01-18 | 上海创景计算机系统有限公司 | 动态配置编程方法 |
CN107229481A (zh) * | 2017-07-19 | 2017-10-03 | 中国银行股份有限公司 | 一种基于Excel的测试方法和工具 |
CN108833394A (zh) * | 2018-06-07 | 2018-11-16 | 中国人民解放军63889部队 | 数据采集系统的协议转换算法 |
CN113887173A (zh) * | 2021-10-20 | 2022-01-04 | 中国电子科技集团公司第三十研究所 | 一种基于xml的协议动态组包和解析方法 |
CN114090830A (zh) * | 2021-09-28 | 2022-02-25 | 中国船舶重工集团公司第七0七研究所 | 一种通过脚本自动处理分析以太网原始数据的方法 |
CN114938397A (zh) * | 2022-05-17 | 2022-08-23 | 浙江木链物联网科技有限公司 | 一种基于kaitai的高效率协议解包组包方法、系统和可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020026464A1 (en) * | 2000-03-13 | 2002-02-28 | Jones Mark A. | XML in the MASP client-server protocol |
CN1738309A (zh) * | 2004-08-20 | 2006-02-22 | 华为技术有限公司 | 数据交换方法 |
CN101159760A (zh) * | 2007-10-24 | 2008-04-09 | 中兴通讯股份有限公司 | 基于xml数据交换文件实现通讯协议的方法及系统 |
CN101697546A (zh) * | 2009-10-30 | 2010-04-21 | 南京中兴软创科技股份有限公司 | 用于网络字节打包和解包的协议数据单元pdu实现方法 |
CN101834848A (zh) * | 2010-03-29 | 2010-09-15 | 北京航空航天大学 | 一种使用xml描述协议的方法及其建立的协议解析系统 |
-
2010
- 2010-09-16 CN CN2010102858042A patent/CN101944025A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020026464A1 (en) * | 2000-03-13 | 2002-02-28 | Jones Mark A. | XML in the MASP client-server protocol |
CN1738309A (zh) * | 2004-08-20 | 2006-02-22 | 华为技术有限公司 | 数据交换方法 |
CN101159760A (zh) * | 2007-10-24 | 2008-04-09 | 中兴通讯股份有限公司 | 基于xml数据交换文件实现通讯协议的方法及系统 |
CN101697546A (zh) * | 2009-10-30 | 2010-04-21 | 南京中兴软创科技股份有限公司 | 用于网络字节打包和解包的协议数据单元pdu实现方法 |
CN101834848A (zh) * | 2010-03-29 | 2010-09-15 | 北京航空航天大学 | 一种使用xml描述协议的方法及其建立的协议解析系统 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104767729A (zh) * | 2015-02-10 | 2015-07-08 | 上海创景计算机系统有限公司 | 通信数据协议构造与分解系统及方法 |
CN106339249A (zh) * | 2016-08-23 | 2017-01-18 | 上海创景计算机系统有限公司 | 动态配置编程方法 |
CN106339249B (zh) * | 2016-08-23 | 2019-09-27 | 上海创景信息科技有限公司 | 动态配置编程方法 |
CN107229481A (zh) * | 2017-07-19 | 2017-10-03 | 中国银行股份有限公司 | 一种基于Excel的测试方法和工具 |
CN108833394A (zh) * | 2018-06-07 | 2018-11-16 | 中国人民解放军63889部队 | 数据采集系统的协议转换算法 |
CN108833394B (zh) * | 2018-06-07 | 2020-10-09 | 中国人民解放军63889部队 | 数据采集系统的协议转换算法 |
CN114090830A (zh) * | 2021-09-28 | 2022-02-25 | 中国船舶重工集团公司第七0七研究所 | 一种通过脚本自动处理分析以太网原始数据的方法 |
CN113887173A (zh) * | 2021-10-20 | 2022-01-04 | 中国电子科技集团公司第三十研究所 | 一种基于xml的协议动态组包和解析方法 |
CN114938397A (zh) * | 2022-05-17 | 2022-08-23 | 浙江木链物联网科技有限公司 | 一种基于kaitai的高效率协议解包组包方法、系统和可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101944025A (zh) | 基于python语言的tcp/udp数据的自动组包与解包的方法 | |
CN107301098B (zh) | 一种基于Thrift协议的远程过程调用装置、方法及系统 | |
CN109710215B (zh) | 分布式流计算的可视化流程处理引擎及其使用方法 | |
Mainland et al. | Flask: Staged functional programming for sensor networks | |
CN102591667B (zh) | 一种远程发布应用的方法及装置 | |
CN102708234B (zh) | 基于HLA的Matlab仿真模型集成系统和方法 | |
CN108038796B (zh) | 基于c++的gis服务运行方法、存储介质 | |
WO1998024020A2 (en) | Method and system for generating software code | |
Koranne et al. | Boost c++ libraries | |
CN104010045B (zh) | 基于云平台的移动节点执行任务的方法 | |
Liu et al. | Engineering information service infrastructure for ubiquitous computing | |
CN102932474B (zh) | 报文解析方法、设备及系统 | |
Wienke et al. | A meta-model and toolchain for improved interoperability of robotic frameworks | |
CN102395138A (zh) | 一种6LoWPAN的协议一致性测试仪表及方法 | |
KR20070061212A (ko) | Owl-s와 웹 서비스를 이용한 bpel4ws 생성시스템 및 그 방법 | |
Eddelbuettel et al. | RProtoBuf: Efficient cross-language data serialization in R | |
Zhang et al. | GIScript: Towards an interoperable geospatial scripting language for GIS programming | |
Wang et al. | An embedded language for programming protocol stacks in embedded systems | |
CN114938397A (zh) | 一种基于kaitai的高效率协议解包组包方法、系统和可读存储介质 | |
Xu et al. | Web-service-oriented customer relationship management system evolution | |
CN114579132A (zh) | 一种转换文件生成方法、装置、电子设备及存储介质 | |
Käbisch et al. | XML-based Web service generation for microcontroller-based sensor actor networks | |
Pfisterer et al. | Energy-optimized data serialization for heterogeneous WSNs using middleware synthesis | |
Snoyman | Warp: A Haskell web server | |
Yalezo et al. | Architecting and Constructing an SOA Bridge for an MVC Platform |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20110112 |