我需要通过TCP以我的自定义格式传输完整的字节数据包。但是如果我理解正确TCP是流协议,那么当我在发送方呼叫send
方法时,无法保证在呼叫recv
时它将在接收方接收到相同大小(它可以与Nagle的算法合并在一起,然后当不适合框架或不适合缓冲时分裂)。
UDP提供完整的数据报,因此没有这样的问题。
所以问题是:recv
相同的pacakges最好和正确的方法是send
,大小相同,没有胶水。我开发使用python。
我认为我可以使用像HDLC
这样的东西,但我不确定通过每个字节进行迭代将是最佳选择。
也许这种情况有一些开源的小例子,或者在书中有描述?
答案 0 :(得分:2)
由于TCP只是一个八位字节流,如果没有胶水,这是不可能的,无论是围绕您的数据(即框架)还是数据内部(结构清晰)。
通常这样做的方法是通过在HTTP标头和正文之间设置分隔符(如\r\n\r\n
),或者只在消息前加上大小。在后一种情况下,只需读取大小(固定的字节数),然后读取实际消息的这个字节数。