El principal problema está en la función SendStream, que no envía archivos mayores que 8192 bytes, no se porqué. La solución es hacer un pequeño algoritmo para que lea del fichero y a la vez los mande por un socket.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;
type
TFMain = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FMain: TFMain;
fsToReceive: TFileStream;
implementation
{$R *.dfm}
procedure TFMain.Button1Click(Sender: TObject);
var
Buff: array [0..1023] of byte;
BytesRead: integer;
fsToSend: TFileStream;
begin
try
fsToSend:= TFileStream.Create('C:\prueba.mp3', fmOpenRead or fmShareDenyWrite);
fsToSend.Seek(0, 0);
repeat
FillChar(Buff, 1024, 0);
BytesRead:= fsToSend.Read(Buff, 1024);
Application.ProcessMessages;
if BytesRead > 0 then
ServerSocket1.Socket.Connections[0].SendBuf(Buff, SizeOf(Buff));
until fsToSend.Position = fsToSend.Size;
finally
fsToSend.Free;
end;
end;
procedure TFMain.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
BytesRead: integer;
Buff: array [0..1023] of byte;
begin
if Assigned(fsToReceive) = false then
fsToReceive:= TFileStream.Create('C:\recibido.mp3', fmCreate or fmOpenReadWrite);
FillChar(Buff, 1024, 0);
BytesRead:= Socket.ReceiveBuf(Buff, 1024);
fsToReceive.Write(Buff, BytesRead);
end;
procedure TFMain.FormCreate(Sender: TObject);
begin
try
ServerSocket1.Active:= True;
ClientSocket1.Active:= True;
Except on Exception do
raise Exception.Create('Ocurrió con el servidor o con el cliente');
end;
end;
procedure TFMain.FormDestroy(Sender: TObject);
begin
if Assigned(fsToReceive) then
fsToReceive.Free;
end;
end.
Aquí la prueba la hice enviando desde el servidor, pero sería lo mismo desde el cliente.
Saludos.