delphisocketstclientsocket

Delphi — TClientSocket ReceiveText MaxLen?


I've been trying to set the length of the amount of characters you recover from the ReceiveText TClientSocket function and nothing seems to be working. E.g., Receiving the first leftmost character(s) from the recovered data or otherwise data stream. Is there a way to accomplish this in Delphi using this specific object?

Help would be much appreciated. Thanks in advance.


Solution

  • ReceiveText doesn't have any means to control the maximum length of the received text.

    The easiest way in ClientType := ctBlocking mode is to use a TWinSocketStream as the documentation states:

    http://docwiki.embarcadero.com/VCL/XE2/en/ScktComp.TClientSocket.ClientType

    When ClientType is ctBlocking, use a TWinSocketStream object for reading and writing. TWinSocketStream prevents the application from hanging indefinitely if a problem occurs while reading or writing. It also can wait for the socket connection to indicate its readiness for reading.

    Example code:

    var
      Stream : TWinSocketStream;
      Buffer : TBytes;
      S      : string;
    begin
      SetLength(Buffer, 100); // 100 bytes buffer size
      Stream := TWinSocketStream.Create(Socket, 5000); // 5 seconds or 5000 milliseconds
      try
        Stream.ReadBuffer(Buffer[0], Length(Buffer)); // raises an Exception if it couldn't read the number of bytes requested
        S := TEncoding.Default.GetString(Buffer); // Works in Delphi 2009+
      finally
        Stream.Free;
      end;
    end;