An example on how I do it:
procedure TUser.SocketDataAvailable(Sender: TObject; Error: Word); Var a: Integer; abc,d: string; begin if ToRcv = 0 then // NEW PACKET INCLUDING HEADER begin NBuffer:= NBuffer + NSocket.ReceiveStr; AnalyzePacket; end else begin if NSocket.RcvdCount < ToRcv then Exit; // THERES MORE DATA TO RECEIVE TO COMPLETE PACKET NBuffer:= NBuffer + NSocket.ReceiveStr; abc:= funcs.Decr(Copy(NBuffer,1,PacketLnght),EncodePswd,True); // dismiss, just decription of data Delete(NBuffer,1,PacketLnght); // KEEP NEW PACKET DATA ON THE BUFFER IF ANY NewCommand(abc); // PROCESS A FULL RECEIVED PACKET ToRcv:= 0; AnalyzePacket; // CHECK IF REAMINING DATA ON THE BUFFER CONTAINS HEADER FOR NEXT PACKET end; end; Procedure TUser.AnalyzePacket; Var a: Integer; abc: String; Label 1; begin 1: if NBuffer = '' then Exit; a:= Pos(#0,NBuffer); // #0 = END OF PACKET HEADER if (a < 1) or (a = length(NBuffer)) then Exit; // NO DATA AFTER THE HEADER PacketLnght:= StrToInt(copy(NBuffer,1,a-1)); // PACKET LENGHT IN STRING FORM (/blush, old code :p) Delete(NBuffer,1,a); // DELETE HEADER ToRcv:= PacketLnght - length(NBuffer); // SIZE OF REAMAINING DATA TO COMPLETE PACKET if ToRcv < 1 then // IF PACKET IS FULL PROCEED TO DECODE DATA AND PROCESS A NEW COMMAND begin abc:= funcs.Decr(Copy(NBuffer,1,PacketLnght),EncodePswd,True); Delete(NBuffer,1,PacketLnght); NewCommand(abc); end; if ToRcv < 0 then goto 1; end; procedure TUser.SendCommand(Cmd: byte; params: string); var q,r: string; begin q:= Funcs.Encr(chr(Cmd)+Params,EncodePswd,True); r:= IntToStr(length(q))+#0; NSocket.SendStr(r+q); end; -- To unsubscribe or change your settings for TWSocket mailing list please goto http://www.elists.org/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be