procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var i,Li,LTOT,L0,L1,L2,position,Recus:integer;
s:string;
Begin
Recus := Socket.ReceiveLength;
//si la longueur reçue est inférieure aux 4 entiers LTOT,L0,L1 et L2 on sort (erreur)
If (Recus < (4*SizeOf(integer))) then
Begin
Memo2.Lines.Add('Erreur lvl1');
exit;
End;
//sinon on initialise le tableau
Setlength(Buffer,Recus);
Socket.ReceiveBuf(Buffer[0],Recus);
//décodage du buffer
position := 0;
Move(Buffer[position],LTOT,SizeOf(LTOT));
inc(position,SizeOf(LTOT));
//si la longueur reçue est identique LTOT, les données ont l'air d'être
//correcte sinon --> erreur
if LTOT<>recus then
Begin
Memo2.Lines.Add('Erreur lvl2');
exit;
End;
For i:=0 to 2 do
Begin
Move(Buffer[position],Li,SizeOf(Li));
inc(position,SizeOf(Li));
//on vérifie que Li ne nous renvoie pas une longueur supérieure à
//ce qu'on a (reçu- les 4 entier indiquant des longueurs)
// sinon il y a erreur de réception
If (position+Li)>(recus-4*SizeOf(integer)) then
Begin
Memo2.Lines.Add('Erreur lvl3');
exit;
End;
s:='';
SetLength(s,Li);
Move(Buffer[position],s[1],Li);
inc(position,Li);
Tab[i]:=s;
End;
Memo2.Lines.Add('Pas d''erreur à signaler');
End;
Partager