首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于TCP报文格式的有关问题

2012-08-26 
关于TCP报文格式的问题?1.TCP的报文的包头格式必须是这样的吗?Delphi(Pascal) codetypedef struct _TCP_HE

关于TCP报文格式的问题?
1.TCP的报文的包头格式必须是这样的吗?

Delphi(Pascal) code
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 ;



2.可以不可以自己定义包头格式,如果可以 那像一下的格式应该怎么定义
Delphi(Pascal) code
报文格式:数据包头 + 数据包体(数据包头的内容是不包含包头的整个数据包长度)。    |------------------|----------------|    |数据包头(56字节)|    数据包体    |    |------------------|----------------|    |   Data Header    |  Data Body     |    |------------------|----------------|所有非数字字段左对齐,右补空格;金额右对齐,左补空格,精确到分。报文体长度=56+数据包体长度。报文编号:ABCDEF001;报文头格式:|------|-----------|--------|--------|--------|------------|-------------------||序号  |   名称    |  类型  |  长度  |  对齐  |  填充字符  |     说明          ||------|-----------|--------|--------|--------|------------|-------------------||  1   |报文体长度 |  数值  |   6    |  Left  |    空格    |   报文体长度      ||------|-----------|--------|--------|--------|------------|-------------------||  2   |交易码     |  字符  |   6    |  Left  |    空格    |   交易码          ||------|-----------|--------|--------|--------|------------|-------------------||  3   |返回码     |  字符  |   4    |  Left  |    空格    |   返回码          ||------|-----------|--------|--------|--------|------------|-------------------||  4   |返回信息   |  字符  |   40   |  Left  |    空格    |   返回信息        ||------|-----------|--------|--------|--------|------------|-------------------|交易返回码定义:   0000 交易成功   1001 无用户号码   9000 系统暂停服务   9999 其它原因



3.报文的包体的格式可以不可以使用自己定义的Record、数组等结构体。还是以字符串的形式组合,再到接收端上解析该字符串。

字符串的组合格式
Delphi(Pascal) code
   以不定长字符流方式设计。报文结构大致可理解为报文头+报文体,最小单位以“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                                       报文结束符

报体的规则是否应该跟上面的定义一样?

4.报体是否可以使用XML进行数据记录?

分不是很多 还望各位大侠能帮我解释一番!

在此谢过!!!!!

[解决办法]
tcp/ip报文是驱动层的事情,不用你关心的
你的报文是应用层的,才需要你实现
------解决方案--------------------


>>报文协议号在发送报文是不是起作用,还是只是做一个区分。

发送报文是底层的事情,对于TCP协议来说,你自己的头也好体也好都是数据,和TCP的发送无关,只和你自己的程序怎么处理这些数据有关。

>>长度我只关心报体的总体长度这个可行不

如果Record结构的长度是不定长的,你的数据长度也必定是不定长的,你自己说需要不需要关心呢?

热点排行