Finalmente encontré este código para enviar y recibir archivos como buffer.
Lo copio para futuras consultas
Sacado de una página que ya no existe (delphi.owns.it).
Código Delphi
[-]
procedure TClientSocket.ReceiveFile(FileName: string);
var
Data: string;
Buffer: pchar;
BinaryFile: file of char;
BinaryFileSize, BytesRead: integer;
begin
Idle(0);
Data := ReceiveString;
BinaryFileSize := StrToInt(Data);
Idle(0);
AssignFile(BinaryFile, FileName);
ReWrite(BinaryFile);
while FileSize(BinaryFile) < BinaryFileSize do
begin
Sleep(1);
BytesRead := ReceiveLength;
if BytesRead > 0 then
begin
GetMem(Buffer, BytesRead);
try
ReceiveBuffer(Buffer^, BytesRead);
BlockWrite(BinaryFile, Buffer^, BytesRead);
finally
FreeMem(Buffer);
end;
end;
end;
CloseFile(BinaryFile);
end;
procedure TClientSocket.SendFile(FileName: string);
var
BinaryFileSize, BytesRead: integer;
Buffer: pchar;
BinaryFile: file of char;
BinaryFileHandle: THandle;
begin
BinaryFileHandle := CreateFile(pchar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL OR FILE_FLAG_NO_BUFFERING, 0);
BinaryFileSize := GetFileSize(BinaryFileHandle, nil);
CloseHandle(BinaryFileHandle);
AssignFile(BinaryFile, FileName);
Reset(BinaryFile);
SendString(inttostr(BinaryFileSize));
Sleep(500);
repeat
Sleep(1);
GetMem(Buffer, 2048);
try
BlockRead(BinaryFile, Buffer^, 2048, BytesRead);
SendBuffer(Buffer^, BytesRead);
finally
FreeMem(Buffer);
end;
until BytesRead < 2048;
CloseFile(BinaryFile);
end;
Saludos