一种报文发送、接收的方法及装置制造方法及图纸

技术编号:4244421 阅读:244 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种报文的发送、接收方法及装置,其中报文的发送方法包括:在每个报文包内容中设置边界识别标识。接收方法包括:接收报文包;判断每个报文包是否携带边界识别标识;根据判断结果形成每包的完整报文;进行格式转换并通过PostMessage转发至用户界面。报文的发送装置包括:边界识别添加模块,用于在每个报文包中增加边界识别标识。接收装置包括通信模块,用于接收报文包,判断每个报文包是否携带边界识别标识,并通过PostMessage将携带边界识别标识的完整报文包转发给用户界面模块;用户界面模块,用于接收来自通信模块的完整报文包。既可实现接收数据报文的完整性、避免粘包现象发生,同时可以使报文的处理和解析相互独立,提高系统的易用性。

【技术实现步骤摘要】

本专利技术涉及移动通信领域,特别涉及一种报文发送和接收的方法及装置。
技术介绍
TCP粘包是指发送方发送的若干包数据报文到接收方接收时粘成一 包,从接收緩冲区看,后一包数据报文的头紧接着前一包数据的尾。出 现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收 方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输 效率,发送方往往要收集到足够多的数据报文后才发送一包数据。若连 续几次发送的报文都很少,通常TCP会根据优化算法把这些数据报文合 成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的 粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是 因为接收方先4巴收到的数据^:在系统接收緩冲区,用户进程从该緩冲区 取数据,若下一包数据到达时前一包数据报文尚未被用户进程取走,则 下一 包数据报文放到系统接收緩冲区时就衔接到前一 包数据之后,而用 户进程根据预先设定的緩冲区大小从系统接收緩冲区取数据,这样就一 次取到了多包数据报文(如图1所示)。粘包情况有两种,假设用户接 收緩沖区长度为m个字节, 一种是粘在一起的包都是完整的数据包(如 图1、图2所示);另一种情况是粘在一起的包有不完整的包(如图3所 示)。不是所有的粘包现象都需要处理,若传输的数据^艮文为不带结构的 连续流数据(如文件传输),则不必把粘连的包分开(简称分包)。但在 实际工程应用中,传输的数据报文一般为带结构的数据,这时就需要做 分包处理。目前常见的解决方法是采用定长的数据包,或者在每个数据包中增 加一个数据包长度字段来区分每一个数据包,通过接收到的长度来区分 每一个数据包。因此,现有技术在数据包的处理上必须采用定长的或者 增加长度字段的数据包,不灵活且效率较低。另外,现有技术对于报文 的处理是同步进行的,这样一旦数据量比较大时,会影响界面的响应。
技术实现思路
本专利技术的目的是针对以上现有技术在发送和接收报文过程中出现粘 包的问题,通过边界识别等手段,实现接收数据报文的完整性、避免粘 包现象发生。本专利技术提供报文的发送方法,包括以下步骤在每个报文包中设置 边界识别标识;发送才艮文包至接收方。上述技术方案中,边界识别标识包括报文头标识和4艮文尾标识。上述技术方案中,在发送报文包至接收方之前,还可以包括计算 准备发送的所有报文包总长度;在发送报文包至接收方之后,还可以包 括判断已发送报文包的长度是否等于所有报文包总长度;如果是,所 有报文包发送完成,否则继续发送所述报文包。本专利技术还提供了报文的接收方法,包括以下步骤接收报文包;判 断每个报文包是否携带边界识别标识;根据判断结果形成每包的完整报 文;重复上述步骤,直至接收到已发送的所有t艮文包。上述涉及接收方法的技术方案中,在接收到已发送的所有报文包之 后,还可以包括形成完整报文,进行格式转换并通过PostMessage转 发至用户界面。上述涉及接收方法的技术方案中,判断每个报文包是否携带边界识 别标识,并根据判断结果形成每包的完整报文具体为判断发送的报文 包是否具有报文头标识;如果是,保存接收到的报文,否则丟弃报文并 继续接收;判断发送的报文包是否具有报文尾标识;如果是,形成完整 的报文包,否则继续接收报文包的内容。上述涉及接收方法的技术方案中,接收报文包可以具体采用阻塞接 收的方式进行。另外,本专利技术提供了报文的发送装置,包括边界识别添加模块, 用于在每个报文包中增加边界识别标识;报文发送^t块,用于发送报文包至接收方。上述涉及发送装置的技术方案中,还可以包括报文计算模块,用 于计算准备发送的所有报文包总长度;报文长度判断模块,用于判断已 发送报文包长度是否等于所有报文包总长度。另外,本专利技术还提供了报文的接收装置,包括通信模块,用于接 收报文包,判断每个所述报文包是否携带边界识别标识;用户界面模块, 用于接收来自通信模块的所有完整报文包。上述涉及接收装置的技术方案中,还可以包括转发模块,用于通 过PostMessage将携带边界识别标识的完整报文转发给用户界面模块。上述涉及接收装置的技术方案中,通信模块可以进一步包括报文 接收模块,用于接收报文包;边界识别判断模块,用于判断每个报文包 是否携带边界识别标识。上述涉及接收装置的技术方案中,边界识别判断模块可以进一步包 括报文头识别子模块,用于判断发送的报文包是否具有报文头标识; 存储子模块,用于在报文头识别子模块判断发送的报文包具有报文头时, 存储接收到的报文;报文丟弃子模块,用于在报文头识别子模块判断发 送的报文包没有报文头时,丟弃报文;报文尾识别子模块,用于判断发 送的报文包是否具有报文尾标识。与现有技术相比,本专利技术具有以下优点本专利技术的报文发送、接收方法及装置采用设置边界识别标识及阻塞 接收模式既可实现接收数据报文的完整性、避免粘包现象发生;同时采 用PostMessage的异步传输手段可以使报文的处理和解析相互独立,提 高系统的易用性。附图说明图l是报文包第一种接收状态示意图; 图2是报文包第二种接收状态示意图; 图3是报文包第三种接收状态示意7图4是报文发送、接收示意图; 图5是本专利技术报文发送方法流程图(实施例1); 图6是本专利技术报文接收方法流程图(实施例2 ); 图7是本专利技术报文发送装置示意图(实施例3 ); 图8是本专利技术报文接收装置示意图(实施例4 )。具体实施例方式下面结合附图,对本专利技术的具体实施方式进行详细描述。本专利技术采用边界识别、阻塞接收和异步传输等手段实现报文包的发 送和接收。边界识别是一种高效的分包技术,通过专门的边界识别标识 (例如报文头和报文尾)来区分每一个完整的报文包,并结合阻塞接收 技术确保每次都能接收一个完整的报文,接收的报文经过处理,转化为 客户端可以理解的格式(例如CMsgPack类才各式),再通过PostMessage 异步传输手段发送给客户端的UI模块。异步传输是通过PostMessage来实现的,与PostMessage相对应的 是SendMessage, 二者的区别为SendMessage是向一个窗口发送消息时, 不会把消息放入消息队列中,而是直接发送给窗口 。窗口接到消息后就 立刻处理,处理完成后把结果返回;而PostMessage是向一个窗口发送 消息时,把消息放入消息队列中,就返回,至于消息有没有被处理以及 何时被处理它是不知道的。例如,如果通知UI要拷贝一个文件,用 SendMessage的话,会等到UI把文件拷贝完毕才能返回,而如果用 PostMessage的话,消息被发出去后就立即返回了 ,不会等待文件拷贝 完毕,这样PostMessage之后可以继续后面的处理。因此,PostMessage 只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这 是个异步消息投放函数,因此对于UI模块的响应没有影响。如果不采用 异步传输机制,处理大量报文时,界面响应就会因为报文的处理而延迟, 降低了客户端程序的易用性。阻塞接收模式是Socket接收模式的一种,是Socket的缺省方式, 即函数阻塞直到调用完毕。可能造成阻塞的函数有connect ()、 accept ()、读写函数、select ()、 poll()、 gethos tbyname (本文档来自技高网
...

【技术保护点】
一种报文的发送方法,其特征在于,包括以下步骤:    在每个报文包中设置边界识别标识;    发送所述报文包至接收方。

【技术特征摘要】
1、一种报文的发送方法,其特征在于,包括以下步骤在每个报文包中设置边界识别标识;发送所述报文包至接收方。2、 根据权利要求1所述的方法,其特征在于,所述边界识别标识包括才艮文头标识和^艮文尾标识。3、 根据权利要求1或2所述的方法,其特征在于,在所述发送报文包至接收方之前,还包括计算准备发送的所有报文包总长度;在所述发送报文包至接收方之后,还包括判断已发送报文包的长度是否等于所述所有纟艮文包总长度;如果是,所述所有报文包发送完成,否则继续发送所述t艮文包。4、 一种报文的接收方法,其特征在于,包括以下步骤接收报文包;判断每个报文包是否携带边界识别标识;根据判断结果形成每包的完整报文;重复上述步骤,直至接收到已发送的所有报文包。5、 根据权利要求4所述的方法,其特征在于,所述在接收到已发送的所有报文包之后,还包括形成完整报文,进行格式转换并通过PostMessage转发至用户界面。6、 根据权利要求4或5所述的方法,其特征在于,所述判断每个报文包是否携带边界识别标识,并根据判断结果形成每包的完整报文具体为判断发送的所述报文包是否具有报文头标识;如果是,保存接收到的报文,否则丟弃所述报文并继续接收;判断发送的所述报文包是否具有报文尾标识;如果是,形成完整的所述报文包,否则继续接收所述报文包的内容。7、 根据权利要求4或5所述的方法,其特征在于,所述接收报文包 具体采用阻塞接收的方...

【专利技术属性】
技术研发人员:高峰
申请(专利权)人:中国移动通信集团辽宁有限公司
类型:发明
国别省市:89[中国|沈阳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1