一般是如何定义个网络数据包格式的
有好几种命令,是采用同步方式进行处理,即问答式格式
这样可能出现的结果是,上一个命令请求没有返回,当前的命令可能返回的是上一个命令的返回
向心跳包刚好和我发送的命令几乎是同时的,那么这个时候我发的命令可能就出现了干扰。这个怎么处理?

解决方案 »

  1.   

    TCP、UDP等协议都有包重组的算法,可以参考他们的实现,也可以自己不关心,只处理上层数据
      

  2.   

    应答包,应该至少返回请求包的序列号,便于应答配对,并且也回拥有一个属于自己的唯一序列号。这个和TCP协议是类似的。在上层协议再实现,有点失去重点了。可以参考sgip,cmpp等应用协议,里面对包,包头,序列号的处理有相应的定义。如果你在传输状态,就该暂停心跳,因为当前链接还是激活的。
      

  3.   

    TCP的话,其实你只要包头加一个包类型字段,然后加一个数据长度就好了,每次先收这两部分,如果类型是心跳就按心跳处理,每次长度都要循环收全
    TCP是不会乱序的
      

  4.   


    我收数据时没有收到,当我再进行下一个命令反馈处理时,收到的是上次的返回,这样就乱了..........
    TCP的话,其实你只要包头加一个包类型字段,然后加一个数据长度就好了,每次先收这两部分,如果类型是心跳就按心跳处理,每次长度都要循环收全 ,是定义命令的问题,没有定义命令长度和命令序号。
      

  5.   

    如何解决网络数据包次序问题
    Answer: 在包头加个SN.