通过 TCP 发送"datagrams"的正确架构方法



我需要通过TCP以自定义格式传输全字节数据包。但是如果我理解正确,TCP是流协议,那么当我在发送端调用send方法时,不能保证在调用recv时它会在接收端以相同的大小接收(它可以与Nagle的算法合并在一起,然后在不适合帧或不适合缓冲区时拆分)。

UDP 提供完整的数据报,因此不存在此类问题。

所以问题是:什么是最好和正确的方法来recvsend相同的包装,具有相同的尺寸,没有胶水。我使用python进行开发。

我想我可以使用类似HDLC的东西,但我不确定遍历每个字节迭代是最佳选择。也许有一些开源的小例子可以说明这种情况,或者在书中有所描述?

由于TCP只是一个八位字节流,因此如果没有胶水是不可能的,无论是在数据周围(即成帧)还是在数据内部(具有清晰末端的结构)。

通常完成此操作的方式是使用分隔符(例如在 HTTP 标头和正文之间rnrn),或者只是在消息前面加上大小。在后一种情况下,只需读取大小(固定的字节数),然后读取实际消息的此字节数。

最新更新