Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 273

/ вопрос открыт /

Всем Привет!
Помогите сделать докачку в этом коде.
Спасибо

Приложение:
  1. procedure TServerForm.IdTCPServer1Execute(AContext: TIdContext);
  2. var
  3. s: string;
  4. AStream: TIDStreamVCL;
  5. Filename: string;
  6. FileSize: int64;
  7. i,n:integer;
  8. begin
  9.  
  10. while AContext.Connection.Connected do
  11. begin
  12. s := AContext.Connection.IOHandler.ReadLn;
  13. if S = 'FILE' then
  14. begin
  15. Filename := AContext.Connection.IOHandler.ReadLn; // get filename
  16. FileSize := StrToInt(AContext.Connection.IOHandler.ReadLn); // get filesize
  17. ForceDirectories(ExtractFilePath(Paramstr(0)) + 'InServerTCP');
  18. AStream := TIDStreamVCL.Create(TFileStream.Create(ExtractFilePath(Paramstr(0)) + 'InServerTCP' + Filename, fmCreate), True);
  19. Application.ProcessMessages;
  20. try
  21. Memo1.SelAttributes.Color := clBlue;
  22. Memo1.Lines.Add('Ïîëó÷åíèå ôàéëà [ '+AContext.Connection.Socket.Binding.PeerIP + ' ] " ' + Filename + ' " '+'Îáùèé ðàçìåð: ' + BytesToStr(Filesize) + '');
  23. Label2.Caption:= 'Èìÿ ôàéëà: '+Filename;
  24. Label3.Caption:='Ðàçìåð: '+ BytesToStr(Filesize);
  25. //----------------------------------------------------------------------------------------------------
  26. i:=FileSize div (32*1024);//ó íàñ áëîêè ïî 16 êá
  27. n:=filesize mod (32*1024);
  28. ProgressBar1.max:=i+1;
  29. ProgressBar1.Position:=0;
  30. for i:=0 to i-1 do
  31. begin
  32. AContext.Connection.IOHandler.ReadStream(AStream, 32*1024, False);
  33. ProgressBar1.Position:=i;
  34. Edit1.Text:=BytesToStr(i);
  35. Application.ProcessMessages;
  36. end;
  37. //À òåïåðü çàêà÷èâàåì îñòàòîê
  38. AContext.Connection.IOHandler.ReadStream(AStream, n, False);
  39. ProgressBar1.Position:=ProgressBar1.max;
  40. //------------------------------------------------------------------------------------------------------
  41. Application.ProcessMessages;
  42. Memo1.SelAttributes.Color := clOlive;
  43. Memo1.Lines.Add('C àäðåññà [ '+AContext.Connection.Socket.Binding.PeerIP + ' ] Èìÿ ôàéëà " ' + Filename + ' " ïîëó÷åí !');
  44. Memo1.Perform(WM_VScroll, SB_LINEDOWN,0);
  45. TrayIcon1.ShowBalloonHint('" Server TCP "',
  46. 'Ôàéë " '+Filename+' " óñïåøíî ïîëó÷åí !', BitWarning, 10);
  47. ProgressBar1.Position:=0;
  48. finally
  49. FreeAndNil(AStream);
  50. end;
  51. end
  52. else if S = 'QUIT' then
  53. begin
  54. Memo1.SelAttributes.Color := clRed;
  55. Memo1.Lines.Add('Êëèåíò [ '+AContext.Connection.Socket.Binding.PeerIP + ' ] îòêëþ÷èëñÿ !');
  56. TrayIcon1.ShowBalloonHint('" Server TCP "',
  57. 'Êëèåíò [ '+AContext.Connection.Socket.Binding.PeerIP + ' ] îòêëþ÷èëñÿ !', BitWarning, 10);
  58. AContext.Connection.Disconnect;
  59. Application.ProcessMessages;
  60. end
  61. else
  62. begin
  63. Memo1.SelAttributes.Color := clRed;
  64. Memo1.Lines.Add(AContext.Connection.Socket.Binding.PeerIP + ' :Íåèçâåñòíàÿ êîììàíäà: ' + S);
  65. AContext.Connection.Disconnect;
  66. AStream.Free;
  67. end;
  68. end;
  69. end;


Vit2 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Vit2 (статус: Посетитель)
Вопрос отправлен: 19 января 2007, 15:51
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Наиболее просто - сделать так, как в HTTP протоколе. А именно, на сервере добавляете возможност, что файл можно запрашивать не весь а часть и для этого его емя нужно задать в виде<имяфайла>?<с какого байта>-<по какой>
Клиент же запрашивает не весь файл, а по кускам. Правда прийдётся добавить комманду запроса размера файла.

Такая система будет совместима сверху вниз и наоборот. Тоесть старый сервер сможет обслуживать новых клиентов (просто не будет докачки) и наоборот

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 19 января 2007, 16:24
Оценка за ответ: 5


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 10 апреля 2020, 04:10
Выполнено за 0.01 сек.
Рейтинг@Mail.ru