其实很简单嘛,只要双方遵从一个约定,即:每当发数据前都先发送本次发送数据的长度如:
TCPClient1.WriteInteger(DataLen);
TCPClient1.OpenWriteBuffer;
TCPClient1.WriteBuffer(Buffer,DataLen);
TCPClient1.CloseWriteBuffer;
而服务器端可以先读接收数据长度,再读数据如:
with AThread.Connection do
begin
DataLen:=ReadInteger;
ReadBuffer(Buffer,DataLen);
end;
TCP协议的主要特征就是提供可靠的数据链路,能够保障数据串行无重复的收发,所以担心接收重复数据或者丢失数据实属杞人忧天。其实楼主要解决的主要问题就是双方都知道自己将要接收的数据长度,所以还是我所说的在发送前先发送即将发送的长度如:
with IdTCPClient1 do
begin
WriteInteger(DataLen);
OpenWriteBuffer;
WriteBuffer(Buffer,DataLen);
CloseWriteBuffer;
end;
接收方首先确定接收长度再接收数据如:
with AThread.Connection do
begin
DataLen:=ReadInteger;
ReadBuffer(Buffer,DataLen);
end;