TCPFrameCodec Class Reference

Inherits from NSObject
Declared in TCPFrameCodec.h

Overview

MobileIMSDK的TCP半包、粘包编/解码实用工具类。

@author Jack Jiang(http://www.52im.net/thread-2792-1-1.html))

+ encodeFrame:

为了妥善解决TCP的半包、粘包经典问题,MobileIMSDK中使用“数据包头Header+数据包体Body”的帧组织形式。

即帧编码格式为:Header(存放的是body数据长度,定长4个字节int整数) + Body(真正的数据内容,不定长,长度应在Header的最大值之内)。

以发送一个字母“A”(即body为“A”)为例,以下是编码后的完整数据帧形式:
+ ------ Header (4 bytes)  ------ | --------   Body (1 bytes) -------- +
+     0x0000 0000 0000 0001  |              0x0041                       +
+ -----(内容为int整数1)  ---- | (内容为字母“A”的ASCII码) +
+ (NSData *)encodeFrame:(NSData *)bodyDataOfFrame

Parameters

bodyDataOfFrame

要发送的真正数据内容,必须不为空(即不为nil且length > 0)

Return Value

如果body不为空则返回编码后的完整数据帧(Header+Body),否则返回nil

Declared In

TCPFrameCodec.h

+ decodeBodyLength:

解码TCP帧的Header数据,得到Body的数据长度(有关MobileIMSDK中的TCP数据包帧编码格式,请见 [TCPCodec encode:] 方法的说明)。

+ (int)decodeBodyLength:(NSData *)headerDataOfFrame

Return Value

Header数据解码得到的int整数就是该TCP帧的Body数据长度(单位:字节)

Discussion

解码TCP帧的Header数据,得到Body的数据长度(有关MobileIMSDK中的TCP数据包帧编码格式,请见 [TCPCodec encode:] 方法的说明)。

Declared In

TCPFrameCodec.h

+ setTCP_FRAME_FIXED_HEADER_LENGTH:

设置MobileIMSDK中的TCP数据帧Headder(头部)字节长度(默认4字节)。

+ (void)setTCP_FRAME_FIXED_HEADER_LENGTH:(int)l

Parameters

l

TCP数据帧Headder(头部)字节长度

Discussion

设置MobileIMSDK中的TCP数据帧Headder(头部)字节长度(默认4字节)。

Declared In

TCPFrameCodec.h

+ getTCP_FRAME_FIXED_HEADER_LENGTH

获取MobileIMSDK中的TCP数据帧Headder(头部)字节长度)。

+ (int)getTCP_FRAME_FIXED_HEADER_LENGTH

Return Value

字节长度

Discussion

获取MobileIMSDK中的TCP数据帧Headder(头部)字节长度)。

Declared In

TCPFrameCodec.h

+ setTCP_FRAME_MAX_BODY_LENGTH:

设置MobileIMSDK中的TCP数据帧Body(数据体)的最大字节长度(默认最大6KB)。

+ (void)setTCP_FRAME_MAX_BODY_LENGTH:(int)l

Parameters

l

TCP数据帧Body(数据体)的最大字节长度

Discussion

设置MobileIMSDK中的TCP数据帧Body(数据体)的最大字节长度(默认最大6KB)。

Declared In

TCPFrameCodec.h

+ getTCP_FRAME_MAX_BODY_LENGTH

获取MobileIMSDK中的TCP数据帧Body(数据体)的最大字节长度。

+ (int)getTCP_FRAME_MAX_BODY_LENGTH

Return Value

字节长度

Discussion

获取MobileIMSDK中的TCP数据帧Body(数据体)的最大字节长度。

Declared In

TCPFrameCodec.h