socket编程里,如何设计自定义通信协议的包头?


如题。 各位在socket编程时,有没有在自定义的通信协议中设计包头?这个包头的设计需要考虑哪些因素呢?

例如,看到过一个网络程序中,自定义包头有如下两个字段: 8字节的自定义包头标识,CRC包头校验字段。那么,还需要考虑哪些字段?

补充问题:由于TCP协议本身就是非常可靠的,这样的包头标识和校验是否有必要呢?

网络编程 socket

远野贵树_ 12 years ago

TCP协议没有消息边界,因此在使用TCP协议的时候需要封装自己的应用层协议。一般来说,消除消息边界有这么几种可行的方法。

  • 每次传输固定字节大小的数据,这样接收端知道接收到的“每一条”数据会有多大;
  • 在传输数据之前加上自定义的标识,通常包括magic code,传输数据的字节长度,校验等;
  • 还有一种方法是使用特定字节,标识数据到了末尾,比如"\r\n"等
eggpain answered 12 years ago

Your Answer