在TCP中接收数据

6 c# c++ networking tcp

如果我在TCP中发送1000个字节,它是否保证接收器将获得整个1000字节"togther"?或者他首先只能获得500个字节,之后他会收到其他字节?

编辑:问题来自应用程序的观点.如果1000个字节在到达应用程序之前重新组装成单个缓冲区..那么我不在乎它是否在路上被分段.

Eug*_*ota 13

请参阅传输控制协议:

TCP提供从一台计算机上的程序到另一台计算机上另一程序的可靠,有序的字节流传送.

"流"意味着从接收者的角度来看没有消息边界.您可以获得一条1000字节的消息或一千条1字节的消息,具体取决于下面的内容以及调用read/select的频率.

编辑:让我从应用程序的角度澄清一下.不,TCP不保证单次读取会为您提供发送方可能发送的所有1000字节(或1MB或1GB)数据包.因此,TCP上方的协议通常包含固定长度的头部,其中包含总内容长度.例如,您总是可以发送1个字节,表示内容的总长度(以字节为单位),最多可支持255个字节.