我尝试在客户端发送长度小于 255 的数据。
我尝试使用此协议发送数据:
Lenghth+String
Byte+string
sample :
string = ABCD
sentdata = 4ABCD
这是我的服务器端代码:
procedure TfrmServer.tcpsrvr1Accept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
a : array of byte;
I : Cardinal;
mystr : string;
b,Len : Byte;
begin
ClientSocket.ReceiveBuf(b,1,0);// first try : get lenght
Len := b;
SetLength(a,Len+1);
mmoRerult.Lines.Add(DateTimeToStr(now) + ' Data Len ' +
IntToStr(Len));
ClientSocket.ReceiveBuf(a,Len,0); // second try : this lone is not worked.
mystr := '';
for I := 1 to 10 do
begin
mystr := mystr + Chr(a[i]);
end;
mmoRerult.Lines.Add(mystr);
//Creating a stream
mmoRerult.Lines.Add('--------------------');
end;
问题是如果我首先读取所有数据first try
,但是如果我读取数据second try
是不可能的,这不可能意味着数据不正确,我认为读取指针是前面的,但是我该如何重置。
并且ClientSocket.BytesReceived
不要给我在读取之前收到的字节数。
我该如何解决这个问题,请不要告诉我首先读取 255 字节,我知道这种方式。