利用RHSocketKit构建自定义协议通信

本文介绍了如何利用RHSocketKit构建基于TCP/IP的自定义协议通信。讲解了协议头(header)和内容(content)的组成,并展示了如何创建数据包对象、定义编码(RHSocketCustom0330Encoder)和解码(RHSocketCustom0330Decoder)协议。通过RHSocketKit的单例服务进行控制,实现了客户端与服务端的数据交互。提供了源码地址和联系方式。
摘要由CSDN通过智能技术生成

利用RHSocketKit构建自定义协议通信

在网络传输中,tcp/ip协议只是网络的基础,分别属于传输层和网络层。我们各种应用之间的通信需要依赖各种各样的协议,是建立在tcp/ip之上的,比如典型的http协议。

在开发过程中,一般我们制定的协议需要两个部分,header和content。

1-header:协议头部,放置一些meta信息。

2-content:应用之间交互的信息主体。

例如:分隔符delimiter-2个字节|数据包类型type-2个字节|长度length(不含包头长度)-4个字节|数据信息主体content-length个子节

其中delimiter,type,length就是header信息,content就是交互的主体。

我们来利用RHSocketKit构造一个数据包对象。

#import "RHSocketPacketContext.h"

@interface RHSocketCustomRequest : RHSocketPacketRequest
//这里,我们把content数据放在夫类的object变量中。
//length可以通过object数据直接获得,不再申明额外的变量。
@property (nonatomic, assign) int16_t fenGeFu;
@property (nonatomic, assign) int16_t dataType;

@end

数据包已经创建好了,那么我们在RHSocketKit中如何去对这种自定义的协议编码(Encode)呢?

定义编码协议RHSocketEncoderProtocol和解码协议RHSocketDecoderProtocol。

RHSocketCustom0330Encoder:编码器,将发送包的数据从一种格式转换成二进制数组。

RHSocketCustom0330Decoder:解码器,将接收包的二进制数组转换成可读的变量数据。

RHSocketCustom0330Encoder文件

#import <Foundation/Foundation.h>
#import "RHSocketCodecProtocol.h"

@interface RHSocketCustom0330Encoder : NSObject <RHSocketEncoderProtocol>

@end

#import "RHSocketCustom0330Encoder.h"
#import "RHSocketException.h"
#import "RHSocketUtils.h"
#import "RHSocketCustomRequest.h"

@implementation RHSocketCustom0330Encoder

- (void)encode:(id<RHUpstreamPacket>)upstreamPacket output:(id<RHSocketEncoderOutputProtocol>)output
{
    id object = [upstreamPacket object];
    if (![object isKindOfClass:[NSData class]]) {
        [RHSocketException raiseWithReason:@"[Encode] object should be NSData ..."];
        return;
    }
    
    NSData *data = object;
    if (data.length == 0) {
        return;
    }//
    
    RHSocketCustomRequest *req = (RHSocketCustomRequest *)upstreamPacket;
    NSUInteger dataLen = data.length;
    //<strong><span style="color:#ff0000;">注意这里,按照协议的描述,顺序把数值转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值