TCP传输,是基于流传输,当然会粘包。如果是UDP,就不会的。
所以,你在向客户端传输数据时, 一定要定义好协议。比如,协议开头(*),协议命令(#1至#255),协议内容长度,协议内容。协议的命令关键字。客户端收到流数据时,进行解析。
Socket.ReceiveLength 这个是偷窥接收缓冲区的大小,在进行大量数据传输时,这个值是不准确的。因为缓冲区是随时变化的。
应该看ReceiveBuf函数的返回值。iRet才是真正接收到的数据。
iRet:=Socket.ReceiveBuf(TempBuf[1],1024*100);
以前做图像传输时,客户端接收到的图像老是错位。后来发现是因为 Socket.ReceiveLength这个值不准备。改过之后,现在很稳定。