正确的架构方式发送"数据报"通过TCP

时间:2016-05-22 21:21:18

标签: python sockets tcp packet datagram

我需要通过TCP以我的自定义格式传输完整的字节数据包。但是如果我理解正确TCP是流协议,那么当我在发送方呼叫send方法时,无法保证在呼叫recv时它将在接收方接收到相同大小(它可以与Nagle的算法合并在一起,然后当不适合框架或不适合缓冲时分裂)。

UDP提供完整的数据报,因此没有这样的问题。

所以问题是:recv相同的pacakges最好和正确的方法是send,大小相同,没有胶水。我开发使用python。

我认为我可以使用像HDLC这样的东西,但我不确定通过每个字节进行迭代将是最佳选择。 也许这种情况有一些开源的小例子,或者在书中有描述?

1 个答案:

答案 0 :(得分:2)

由于TCP只是一个八位字节流,如果没有胶水,这是不可能的,无论是围绕您的数据(即框架)还是数据内部(结构清晰)。

通常这样做的方法是通过在HTTP标头和正文之间设置分隔符(如\r\n\r\n),或者只在消息前加上大小。在后一种情况下,只需读取大小(固定的字节数),然后读取实际消息的这个字节数。