关于TCP报文格式的问题?
1.TCP的报文的包头格式必须是这样的吗?
typedef struct _TCP_HEADER { USHORT nSourPort ; // 源端口号16bit USHORT nDestPort ; // 目的端口号16bit UINT nSequNum ; // 序列号32bit UINT nAcknowledgeNum ; // 确认号32bit USHORT nHLenAndFlag ; // 前4位:TCP头长度;中6位:保留;后6位:标志位16bit USHORT nWindowSize ; // 窗口大小16bit USHORT nCheckSum ; // 检验和16bit USHORT nrgentPointer ; // 紧急数据偏移量16bit} TCP_HEADER, *PTCP_HEADER ;报文格式:数据包头 + 数据包体(数据包头的内容是不包含包头的整个数据包长度)。 |------------------|----------------| |数据包头(56字节)| 数据包体 | |------------------|----------------| | Data Header | Data Body | |------------------|----------------|所有非数字字段左对齐,右补空格;金额右对齐,左补空格,精确到分。报文体长度=56+数据包体长度。报文编号:ABCDEF001;报文头格式:|------|-----------|--------|--------|--------|------------|-------------------||序号 | 名称 | 类型 | 长度 | 对齐 | 填充字符 | 说明 ||------|-----------|--------|--------|--------|------------|-------------------|| 1 |报文体长度 | 数值 | 6 | Left | 空格 | 报文体长度 ||------|-----------|--------|--------|--------|------------|-------------------|| 2 |交易码 | 字符 | 6 | Left | 空格 | 交易码 ||------|-----------|--------|--------|--------|------------|-------------------|| 3 |返回码 | 字符 | 4 | Left | 空格 | 返回码 ||------|-----------|--------|--------|--------|------------|-------------------|| 4 |返回信息 | 字符 | 40 | Left | 空格 | 返回信息 ||------|-----------|--------|--------|--------|------------|-------------------|交易返回码定义: 0000 交易成功 1001 无用户号码 9000 系统暂停服务 9999 其它原因
以不定长字符流方式设计。报文结构大致可理解为报文头+报文体,最小单位以“NAME:VALUE”对的型式, NAME、VALUE都以各自的长度为前缀;一条典型的发送报文如下所示: 009MessageID:00574606:013TransactionID:005BOKFS:003///:0011:003ROW:0011:003COL:0014:010Packeduser:003LHY:010packedtime:0192006-06-06 10:29:37:004flag:001Y:009accessory:0011:003///:0012:003ROW:0011:003COL:0017:009IMPRESTNO:0130606163005721:008inittime:0192006-06-16 15:30:04:009CompanyID:003ITC:011Companytype:001A:009payamount:0041936:012actualamount:0041936:008category:006进帐单:003$$$解析说明:名称长度 名称 Req 值长度 值 说明009 MessageID Y 005 74606 报文头,报文ID013 TransactionID Y 005 BOKFS 报文头,交易ID006 Err_ID 返回报文 Y 003 000 出错ID,000为成功,008 Err_DESC 返回报文Y 004 成功 异常中文描述008 Err_DESE 返回报文Y 007 Success 异常英文描述003 /// 如有内容Y 001 1 报文体,组号符003 ROW 如有内容Y 001 1 报文体,行数003 COL 如有内容Y 001 4 报文体,列数010 Packeduser N 003 LHY 报文体,内容值010 packedtime N 019 2006-06-06 10:29:37 报文体,内容值004 flag N 001 Y 报文体,内容值009 accessory N 001 1 报文体,内容值...... 003 $$$ Y 报文结束符