不可能发生错位的。除非对方发错了,比如先发个整数100表示下面有100个字节的数据,但他只发了99个,这样才会发生错位。至于在网络传输过程中的数据改变也不必担心,TCP协议是可靠的面向连接的流协议,协议内部已经包含了校验和纠错,它交给你的数据必定与对方发出的数据一致。

解决方案 »

  1.   

    你可以一次性把收到的数据都读入到buffer中,再分析你的这个buffer,
    即使这次出错了,下次的数据读入到buffer中也是新的。
      

  2.   

    不用担心这个,TCP/IP协议本身就是按一个个报文发送的,也就是说它已经帮你分好包了,只要你的报文不超出最大长度限制,你每在发送端发送一个报文,在接收端都会收到同样一个报文,并且能够得到该报文的长度,所以你在报文开头写的整数都可以省掉,当然在有时候还是有用的。
      

  3.   

    建议直接发送序列化后object,这样就不会错了还不知道了。
      

  4.   

    这样做有可能出问题。虽然tcp是可靠协议,但是他用校验非常简单,难免会出错,万一出错,以后发的东西就没用了,应为tcp是基于流的(upd没问题,它是基于包的)。最好自己做校验(32bit crc)帧头、帧长、校验、序号是必需的,其他无所胃了。