У вас при передаче длины файла в переменной sl может оказаться часть данных файла. Из-за этого будет ошибка конвертации строки в число. Надо клиентом подключиться, запросить файл, далее сервер передает длину файла. Клиент ее получает, потом запрашивает сам файл. Сервер начинает его передавать.
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
s, sl: AnsiString;
begin
s := Socket.ReceiveText;
if not Reciving then
begin
SetLength(sl, StrLen(PAnsiChar(s)) + 1);
StrLCopy(@sl[1], PAnsiChar(s), Length(sl) - 1);
DataSize := StrToInt(sl);
Data := TMemoryStream.Create;
Delete(s, 1, Length(sl));
Reciving := True;
Socket.SendText('sendfile');
Exit;
end;
try
Data.Write(s[1], Length(s));
if Data.Size = DataSize then
begin
Data.Position := 0;
Data.SaveToFile('1.dll');
Data.Free;
Reciving := false;
Socket.Close;
ShowMessage('ок');
end;
except
Data.Free;
end;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ms: TMemoryStream;
Size: Integer;
Command: AnsiString;
begin
Command := Socket.ReceiveText;
if Trim(Command) = 'send' then
begin
ms := TMemoryStream.Create;
try
ms.LoadFromFile
('C:\ttxsql_project\Technotronics_Project\Run\libeay32.dll');
ms.Position := 0;
Socket.SendText(IntToStr(ms.Size));
except
ms.Free;
end;
end
else if Trim(Command) = 'sendfile' then
begin
ms := TMemoryStream.Create;
try
ms.LoadFromFile
('C:\ttxsql_project\Technotronics_Project\Run\libeay32.dll');
ms.Position := 0;
Socket.SendStream(ms);
except
ms.Free;
end;
end;
end;