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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 075

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

Приветствую, уважаемые эксперты!

Нужно регулярно производить синхронизацию по FTP с несколкими серверами.
Файлы достаточно большие (до 45 Мб).

Есть один "обменный компьютер", который должен скачать с нескольких компьютеров несколько файлов через FTP, а после этого закачать на них же.

Пока ничё лучше не придумал, как cmd + ftp - средствами самой операционки. Но если связь обрывается, то приходится заново. Да и не очень-то это и удобно.

Нужна возможность докачки, возможность сделать паузу и ограничение на скорость обмена.

Подскажите, такое реализовать возможно?

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

Вопрос задал: Фамилия Имя Отчество (статус: Посетитель)
Вопрос отправлен: 11 ноября 2008, 09:02
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, Emfs!
Держите статью "Создаём свой GetRight" в приложении. Она конечно же полностью не решит ваши вопросы, но направит на путь истенный.

P.S. Желаю удачи.

Приложение:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14. procedure tform1.button2click(sender: tobject);
  15. begin
  16. end;
  17.  
  18.  
  19. procedure tform1.button2click(sender: tobject);
  20. begin
  21.  
  22.  
  23.  
  24. end ;
  25.  
  26.  
  27.  
  28.  
  29. procedure tform1.edit1change(sender: tobject) ;
  30. begin
  31. end ;
  32.  
  33.  
  34. procedure tform1.edit1change(sender: tobject) ;
  35. begin
  36.  
  37. end ;
  38.  
  39.  
  40.  
  41. edit2.tag := 1 ;
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48. procedure tform1.button1click(sender: tobject) ;
  49. begin
  50.  
  51. if ( edit1.tag = 1 ) and ( edit2.tag = 1 ) and ( edit1.text <> '' )
  52.  
  53. begin
  54.  
  55. end
  56.  
  57. end ;
  58.  
  59.  
  60.  
  61.  
  62. procedure tform1.button1click(sender: tobject) ;
  63. begin
  64.  
  65. if ( edit1.tag = 1 ) and ( edit2.tag = 1 ) and ( edit1.text <> '' )
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. begin
  73.  
  74. end
  75. else
  76.  
  77. begin
  78.  
  79. end
  80.  
  81. end
  82.  
  83. end ;
  84.  
  85.  
  86.  
  87. var
  88. serv , addr , host , dir : string ;
  89.  
  90.  
  91. procedure tform1.button1click(sender: tobject) ;
  92. begin
  93.  
  94. if ( edit1.tag = 1 ) and ( edit2.tag = 1 ) and ( edit1.text <> '' )
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101. begin
  102.  
  103.  
  104. host := copy ( addr , 1 , ( pos( '/' , addr ) - 1 ) ) ;
  105.  
  106. delete( addr , 1 , ( pos( '/' , addr ) - 1 ) ) ;
  107. dir := addr ;
  108.  
  109.  
  110. end
  111. else
  112.  
  113. begin
  114.  
  115. end
  116.  
  117. end
  118.  
  119. end ;
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130. edit1.enabled := false ;
  131.  
  132.  
  133.  
  134.  
  135. nmftp1.host := host ;
  136. nmftp1.userid := 'anonymous' ;
  137. nmftp1.password := '' ;
  138.  
  139. nmftp1.connect ;
  140. nmftp1.mode( mode_image ) ;
  141.  
  142. nmftp1.download( dir , edit2.text ) ;
  143.  
  144.  
  145. nmftp1.disconnect ;
  146.  
  147.  
  148.  
  149. edit1.enabled := true ;
  150.  
  151. edit1.clear ;
  152.  
  153.  
  154.  
  155.  
  156.  
  157. procedure tform1.nmftp1connect(sender: tobject);
  158. begin
  159.  
  160. end;
  161.  
  162.  
  163. procedure tform1.nmftp1connectionfailed(sender: tobject);
  164. begin
  165.  
  166. end;
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177. edit1.enabled := false ;
  178.  
  179.  
  180.  
  181.  
  182.  
  183. delete(addr, 1, 7) ;
  184.  
  185.  
  186. nmhttp1.inputfilemode := true ;
  187. nmhttp1.body := edit2.text ;
  188.  
  189.  
  190.  
  191.  
  192. edit1.enabled := true ;
  193.  
  194. edit1.clear ;
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. procedure tform1.nmftp1packetrecvd(sender: tobject);
  203. begin
  204. progressbar1.position := round(nmftp1.bytesrecvd*100/nmftp1.bytestotal) ;
  205.  
  206. nmftp1.bytestotal ) ;
  207. end;
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 14 ноября 2008, 13:17


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

Всего сообщений: 8; последнее сообщение — 11 ноября 2008, 21:17; участников в обсуждении: 4.
Vova Sitnov

Vova Sitnov (статус: Посетитель), 11 ноября 2008, 11:21 [#1]:

существует пакет - FastNet там есть компонент NMFtp можно через него попробовать!
DNK

DNK (статус: Студент), 11 ноября 2008, 13:01 [#2]:

Emfs!
Мне не совсем понятна работа обменного компьютера. Средствами cmd+ftp вы организовали обмен между удаленными серверами?
Очень интересно лично для себя. Всегда думал, что команда ftp ведет обмен только между удаленным и локальным узлом.

Если только вы не использовали связку cmd+telnet+ftp?
"Digital Networked Knight"
Вадим К

Вадим К (статус: Академик), 11 ноября 2008, 13:07 [#3]:

протокол ftp позволяет подключиться к двум серверам, а потом отдать команду с одно качать на другой. при этом "коммандный компьютер" не пропускает через себя траффик файлов. Это побочный эффект.
А что за файлы синхронизируются, не база данных случайно?
Галочка "подтверждения прочтения" - вселенское зло.
Фамилия Имя Отчество

Фамилия Имя Отчество (статус: Посетитель), 11 ноября 2008, 15:37 [#4]:

Ершов Денис, с обменного компа берутся файлы для формирования основной базы. А те компы - удалённые районы. Обмен ведётся только между удалённым и обменным компьютером (локальным)

Вадим К, точно, база данных.
Вадим К

Вадим К (статус: Академик), 11 ноября 2008, 15:45 [#5]:

Если это база, то кто мешает делать немножко по другому. Пусть каждый локальный компьютер сохраняет предыдущую версию базы перед синхронизацией. И присылает не саму базу, а разницу, то есть, это будут сообщения вида "такая запись есть, такой нет". Как ещё более изощерённый вариант - это будет готовый sql файл, который содержит записи вида insert/delete.
И присылают только разницу. Назад им тоже уходит только разница.
Галочка "подтверждения прочтения" - вселенское зло.
Фамилия Имя Отчество

Фамилия Имя Отчество (статус: Посетитель), 11 ноября 2008, 16:03 [#6]:

Вадим, так и делается. Не SQL, но гоняется не вся база это точно. Потому что вся - несколько гигов.
Вадим К

Вадим К (статус: Академик), 11 ноября 2008, 16:37 [#7]:

по моему, тут надо подумать о кластеризации. Когда серверы сами между собой будут синхронизироваться либо сервер вообще физически один. Но учитывая, что у вас в России за МКАДом толком и интернета нет, либо цена на него такая, что дешевле на дисках носить.

Если файл генерируется самостоятельно, то докачку можно сделать очень просто и красиво. Файл паковать в архив и разбивать на части (рар поддреживает это автоматически). и качать по куску. таким образом можно минимизировать проблемы с потерей связи. А докачка вроде на фтп поддерживается, но утверждать не буду.
Галочка "подтверждения прочтения" - вселенское зло.
DNK

DNK (статус: Студент), 11 ноября 2008, 21:17 [#8]:

Покопал в Итернете. Век живи век учись. Сколько работал с этим протоколом, а про FXP не слыхал.
"Digital Networked Knight"

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:26
Выполнено за 0.02 сек.