`
yangyang
  • 浏览: 173592 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

实现通信协议的思路、架构以及调用过程

阅读更多
          最近在维护一个电信的项目中间遇到了一些通信协议的东西。比如协议的实现等等。我总结了一些心得体会和大家分享一下。没有代码,只是一些思路。 通常情况下我们要用代码实现一个协议通常都要将这个协议看个2~3遍,只有对这个协议有了一定了解我们才能够用代码实现它,架构设计才能合理,维护起来才能比较容易。本文主要针对基于tcp/ip通信协议。<o:p></o:p>

首先我们要搞清下面几个问题:<o:p></o:p>

1.这个协议主要完成那些实际功能.例如对手机用户进行管理,或者查询手机用户信息等等<o:p></o:p>

2.支持TCP/IP协议还是UDP协议,如果支持TCP/IP协议,那么它是基于长连接还是短连接.

3.这个协议所定义的数据类型

4.协议包头(HEADER)的定义。

5.协议包体(BODY)的定义。

         在说明实现过程之前,我们来了解几个概念:

数据包(PDU) - 通信协议中定义的数据包既通信数据。它主要包括请求和应答(TCP/IP)

包头(HEAD)  - 通信协议中定义的数据包的一些重要的信息。如果包的长度,功能命令。

包体 – BODY包含一些为了完成HEADER中定义的功能所需要的一些数据。注意有的时候一个包是可以没有包体的。如:心跳包。

         实现过程:

1.      实现协议所定义的基本的数据类型。如:定长字符串、整形的字节数组、协议定义的特殊数据类型。

2.      协议基本的常量,我们可以定义一个类或者接口来将协议中的常量统一的保存起来。但有些业务常量还是跟随业务类或者接口在一起比较好,具体情况具体分析。

3.      PDU包装器和PDU解析器,在各种PDU使用。这个是我们实现这个协议的一个关键。

·        PDU包装器 :这个类可以将协议的数据类型转换成字节数组,并保存在包装器中。我们用它来将我们包装的PDU中的信息装换成字节数组的形式,因为只有转化成字节数组的形式才能在网络上传输。

·        PDU解析器:这个类可以将字节数组(通过socket inputstream读出来的)的信息解析包装成协议中定义的各种类型。这个类的工作过程是和PDU包装器反相的。

PDU包装器和PDU解析器都包含一个字节数组,并有一个可以移动的当前位置标志。数组的作用是保存pdu 字节信息,而位置标志用来记录当前读取位置或者当前转换位置。只有这样才能依次读取或者转换字节数组。

<o:p> </o:p>

4.      实现HEADER,在实现的过程中我们需要协议定义的一些特殊的数据类型,所以我们需要把这个步骤定义在后面。

5.      实现PDU,从面向对象设计的角度出发,我们首先要找出所有完成不同功能的PDU的公共部分(如相同的字段或相同的功能)抽象出来定义成接口、抽象类或者公共的基类(BASE CLASS),具体设计依照协议的具体定义。然后通过实现PDU接口或者继承公共的PDU抽象类或者基类来实现不同的PDU. 它应该有两个重要的方法:

1)      Input Method :

将输入字节流(Socket InputStream )包装成当前的PDU对象,用于进一步处理。

2)      Output Method

将当前的PDU对象转换成字节流的形式,用于通过(Socket OutputStream )在网络中传输。

6.      PDU 管理器,用来读取和创建PDU.

<o:p> </o:p>

完成协议中的功能:我们可以通过发用消息包和得到消息包来完成协议功能。

下面介绍完成协议功能的步骤:

                                                                     I.      创建请求对象

                                                                   II.      根据不同功能设置 header的字段值

                                                                III.      保存header到请求对象中

                                                                IV.      根据header中设置的PDU的功能,保存功能必须的字段到请求对象中。

                                                                  V.      发送请求对象字节流

                                                                VI.      得到响应对象

                                                             VII.      解析响应对象

                                                           VIII.      得到结果

上面总结了协议实现的思路、架构以及调用过程,希望能够对大家有所帮助,能够达到抛砖引玉的效果。

<o:p> </o:p>

分享到:
评论
2 楼 JAVA_ED 2007-06-11  
好萌的卡卡西啊
1 楼 piper 2007-05-09  
能详细说一下心跳包吗?

相关推荐

    2024年设备创新与市场拓展成果.pptx

    行业报告

    PHP语言优质学习资源和工具与案列应用场景和开发文档.txt

    PHP语言优质学习资源和工具与案列应用场景和开发文档.txt

    web期末作业设计网页d-笔记

    web期末作业设计网页

    基于Java的志愿者服务微信小程序设计系统源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    删除win10/11安全中心

    删除win10/11安全中心

    三层图纸编号D037-三层-10.40&15.10米-施工图.dwg

    三层图纸编号D037-三层-10.40&15.10米-施工图.dwg

    30_安卓的培训机构管理系统-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    基于微信小程序的垃圾分类系统设计源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    北交课程实验操作系统作业报告.zip

    北交课程实验操作系统作业报告.zip

    端午节ceDetection-笔记

    端午节ceDetection-笔记端午节ceDetection-笔记

    老鼠检测数据集VOC+YOLO格式4107张1类别.7z

    数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4107 标注数量(xml文件个数):4107 标注数量(txt文件个数):4107 标注类别数:1 标注类别名称:["mouse"] 每个类别标注的框数: mouse 框数 = 14321 总框数:14321 使用标注工具:labelImg 标注规则:对类别进行画矩形框 重要说明:数据集有增强,目测超过一半都是增强的图片 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注 更多信息:blog.csdn.net/FL1623863129/article/details/139378842

    CNC运动控制编程.pdf

    CNC运动控制编程.pdf

    用四元数或者一节互补滤波解算角度mpu6050.7z

    用四元数或者一节互补滤波解算角度mpu6050.7z

    docker 常用镜像下载: jdk8-alpine3.9

    加载镜像:docker load -i jdk8.tar

    计算机与网络基础知识要点学习

    计算机与网络基础知识要点学习 网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标准上进行。目前TCP/IP协议已经成为Internet中的"通用语言",下图为不同计算机群之间利用TCP/IP进行通信的示意图。 1. 网络层次划分 为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了"开放系统互联参考模型",即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。其中第四层传输层完成数据传送服务,上面三层

    货车、 客车燃料消耗量参数表.doc

    货车、 客车燃料消耗量参数表.doc

    基于梯度归因异常性的OD检测内含数据集-含说明书(可运行).zip

    基于梯度归因异常性的OD检测内含数据集-含说明书(可运行).zip

    无利益冲突声明.doc

    无利益冲突声明.doc

    知识蒸馏-基于Caffe实现的知识蒸馏Layer算子实现-附项目源码-优质项目实战.zip

    知识蒸馏_基于Caffe实现的知识蒸馏Layer算子实现_附项目源码_优质项目实战

    基于深度学习的无创血压估计模型建立和设计

    这个完整工程给出基于深度学习的无创血压估计模型建立和设计的功能实现,适合基于机器学习和深度学习模型分析的学习资料,并有详细程序说明书。

Global site tag (gtag.js) - Google Analytics