关于如何构建udp数据包数据部分的问题
现有如下要求:
udp数据包数据部分的结构格式如下:
字段 长度 数据类型 备注
identifier 8 Char 固定为:ABCDEFGH
Length 4 Int 不足在后面补0
Phonenum 16 Char 不足在后面补0
Password 16 Char 不足在后面补0
Command 4 Int 1001
Sn 4 Int 命令序列号,由发送端产生,响应端返回时,用于判断该返回是针对哪个命令。
Param不限 Char 根据命令不同,值也不同
CRC 4 Int CRC32校验位
我用的是如下结构体来构建的,不知道对不对
typedef struct {
char identifier[8];
int length;
char phonenum[16];
char password[16];
int command;
int sn;
char param[1];
int crc;
}udpdata;
给param将要赋值一个字母,所以我建立的为1个字节;如果param为可变的,我该如何创建?
我接着创建了一个udpdata *senddata;
对senddata各个成员采用如下方式赋值的
senddata=malloc(sizeof(udpdata));
memset(senddata, 0, sizeof(udpdata));
memcpy(senddata->identifier, "ABCDEFGH",8);
memcpy(senddata->phonenum, "12345678900",11);
memcpy(senddata->password, "123456",6);
memcpy(senddata->param, param, strlen(param));
senddata->command=command;
senddata->sn=1;
senddata->length=sizeof(*senddata);
char buf[sizeof(*senddata)];
memset(buf, 0, sizeof(*senddata));
memcpy(buf, senddata, sizeof(*senddata));
CRC *crc=[[CRC alloc] init];
senddata->crc=[crc udp_crc32: buf Length: sizeof(*senddata)-4];
CRC,是我写的另一个类,暂时可先不管它的对错。
上面有几个字段要求“不足在后面补0”,不知道怎么补?
如果udp数据部分接口创建并赋值好了,那又该如何将其转换为可发送出去的数据呢,比如转换为NSData?里面主要是包含有那个int型的字段,怎么转换,一般转换为什么样的格式。。。。。
菜鸟请教各位了~~~谢谢!十万火急
[最优解释]
这种协议就得逐个字节对,另外补零是针对字符串,整形不可能补零
变长数组需要在协议中指定长度,这种协议的一般格式是 协议类型,数据长度,数据,其中数据还可以再嵌套
[其他解释]
搞这么麻烦,你用用AsyncSocket。直接把nsstring转换为dsdata然后发送就可以了
[其他解释]
我也不想这么麻烦,但是对方的接口是那样的,对方接收到数据包的时候就是按照那样的字段对应的字节解包分析,然后回传数据的,如果用nsstring,请问字节大小如何处理,还有补零的那个怎么处理呢?
[其他解释]