Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
Delphi 11 Alexandria
|
AW: Suche die TByteBuffer Klasse aus SysUtils ab XE 3 (?)
17. Okt 2013, 19:51
Delphi-Quellcode:
function SendRequest(var AData: string): boolean;
var
len: integer;
bytes: TBytes;
temp_buffer: TByteArray;
buffer: TByteBuffer; //<-- das hier kennt mein Delphi nicht. In SysUtils finde ich nur etwas von TByte
begin
Result := false;
if AData <> '' then
begin
// FClient = ScktComp.TClientSocket;
if FClient.Active then
begin
len := Length(AData);
SetLength(bytes,Length(AData));
bytes := BytesOf(AData);
if FClient.Socket.SendBuf(bytes[0],Length(bytes)) = len then
begin
buffer := TByteBuffer.Create;
try
if not WaitForResponse(FClient.Socket,1) then
begin
len := FClient.Socket.ReceiveLength;
// Nutzdaten übernehmen und zurückgeben
if not WaitForResponse(FClient.Socket,len) then
begin
ZeroMemory(@temp_buffer,SizeOf(temp_buffer));
AData := '';
repeat
len := FClient.Socket.ReceiveLength;
if FClient.Socket.ReceiveBuf(temp_buffer,len) > 0 then
begin
buffer.AddBytes(temp_buffer[0],len);
ZeroMemory(@temp_buffer,SizeOf(temp_buffer));
Delay(1);
end;
until (len = 0);
ZeroMemory(@bytes,SizeOf(bytes));
SetLength(bytes,buffer.Size);
CopyMemory(@bytes[0],@buffer.Data[0],buffer.Size);
AData := AData + TEncoding.Unicode.GetString(bytes);
if AData <> '' then
begin
// In AData steht die Antwort
Result := true;
end;
end;
end;
finally
buffer.Free;
Screen.Cursor := crDefault;
end;
end;
end;
end;
end;
Jürgen Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
|
|
Zitat
|