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