В чем ошибаюсь? Ниже код передачи файла. Клиент отправляет команду, сервер подтверждает что можно передавать. Клиент записывает место куда сохранить файл и передает сам файл.
Сервер принимает файл и отправляет подтверждение что принял. Но клиент упорно не принимает подтверждение. Методом "дурака" поставил две записи подряд. В итоге ответ "FILEOK1" не приходит, а "FILEOK2" приходит.
 
 Клиент:
- Код: Выделить всё
- IdCmdTCPClient1.ReadTimeout:=7000;
 iCmdResult:=403;
 iCmdResult:=IdCmdTCPClient1.SendCmd(sCmd,-1,cmdEncoding);
 if iCmdResult=101 then
 begin
 IdCmdTCPClient1.IOHandler.WriteLn(sServerFilePath,cmdEncoding);
 mClientLog.Lines.Add('101; Начинаю передачу файла');
 try
 FileStream := TFileStream.Create(sFilePath, fmOpenRead or fmShareDenyWrite);
 iSize := FileStream.Size;
 IdCmdTCPClient1.IOHandler.LargeStream := True;
 IdCmdTCPClient1.IOHandler.WriteBufferOpen;
 IdCmdTCPClient1.IOHandler.Write(iSize);
 IdCmdTCPClient1.IOHandler.Write(FileStream, iSize);
 IdCmdTCPClient1.IOHandler.WriteBufferClose;
 sCmdResult:='0';
 try
 sCmdResult:=IdCmdTCPClient1.IOHandler.ReadLn();
 except
 end;
 if StrToInt(sCmdResult)=StrToInt('200') then
 begin
 mClientLog.Lines.Add(Format('200; Файл отправлен. Передано %d байт',[iSize]));
 end
 else begin
 mClientLog.Lines.Add('507; Ошибка отправки файла');
 end;
 FileStream.Free;
 except
 FileStream.Free;
 mClientLog.Lines.Add('500; Ошибка получения файла');
 end;
 end
 else begin
 mClientLog.Lines.Add(Format('%d; Нет разрешения на передачу файлов',[iCmdResult]));
 end;
Сервер:
- Код: Выделить всё
- if NetDirectoryCreate(ExtractFilePath(sFilePath)) then
 begin
 sFilePath:=UTF8ToSys(sFilePath);
 FileStream:=TMemoryStream.Create;
 FileStream.Position:=0;
 try
 ASender.Context.Connection.IOHandler.LargeStream:=True;
 iSize:=ASender.Context.Connection.IOHandler.ReadInt64();
 ASender.Context.Connection.IOHandler.ReadStream(FileStream,iSize);
 if FileStream.Size=iSize then
 FileStream.SaveToFile(sFilePath);
 FileStream.Free;
 iCmdResult:=MRNSERVERREPLY_GREETING;
 ThreadSafeLogAdd(format('%d; %s; File saved',[iCmdResult,tmpClientItem.Login]));
 except
 FileStream.Free;
 SysUtils.DeleteFile(sFilePath);
 iCmdResult:=MRNSERVERREPLY_ERROR;
 ThreadSafeLogAdd(format('%d; %s; Error save file',[iCmdResult,tmpClientItem.Login]));
 end;
 if iCmdResult=MRNSERVERREPLY_GREETING then
 begin
 ASender.Context.Connection.IOHandler.WriteLn('FILEOK1');
 ASender.Context.Connection.IOHandler.WriteLn('FILEOK2');
 end;
 //Запись атрибутов файлов
 
 end
 else begin
 ThreadSafeLogAdd(format('%d; %s; Error get directory path',[iCmdResult,tmpClientItem.Login]));
 end;




