如果在客户端我连接到服务器并在套接字上调用Send()
方法多次发送短数据,那么服务器有时只接收一个包含所有累积数据的“数据包”是否正常这是许多发送方法的总和?
答案 0 :(得分:4)
是。 TCP是一个流,没有单个“数据包”的概念 - 你应该期望一次接收一个字节,所有内容合并在一起或者介于两者之间。
唯一的保证是不会丢失任何数据,并且它会以您发送的顺序到达。
答案 1 :(得分:-1)
是的,这对于基于TCP流的套接字来说是完全正常的。默认情况下,启用发送合并的Nagle algorithm,这会减少在少量时间内传输的数据包的数量。如果希望每个send()
传输自己的数据包,则必须禁用该算法。有时在特殊情况下需要这样做,但通常默认行为对于大多数套接字使用来说都是充足和可取的。