Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.11.2010, 11:06
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
Вопрос Update для программы

Я хочу сделать апдейт для своей проги тоесть кнопка при нажатии которой программа обращается к моему сайту и проверяет наличие новой версии если есть то обновить если нет то сообщение что новых версий нет Заранее спасибо сайт на народе!!!!!
Ответить с цитированием
  #2  
Старый 24.11.2010, 15:27
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию

а хде ваш код?

Собственно алгоритм такой:
создаём список файлов и их хешей(md5)
программой скачиваем этот список и сверяем с тем что уже есть в программе.
если хешь какого-либо файла отличается то, скачиввааем этот файл.
Ответить с цитированием
  #3  
Старый 24.11.2010, 15:31
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

да кода пока нет а как реализовать не подскажешь на каком нибудь своём примере а то я не даже не знаю как это делать но надо)))
Ответить с цитированием
  #4  
Старый 24.11.2010, 16:02
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

ну незнаю.. дело вкуса.
Но меня, например, начинает "колбасить" когда какая-то прога без разрешения пытается залезть в инет и что-то там скачать/отправить.
Тем более неизвесно кем написанная...
Ответить с цитированием
  #5  
Старый 24.11.2010, 16:04
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

не само сообщение вылитать не будет будет кнопка обновить в настройках так чё напишешь
Ответить с цитированием
  #6  
Старый 24.11.2010, 17:29
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Заплатишь????
Ответить с цитированием
  #7  
Старый 24.11.2010, 18:41
Аватар для T-dayne
T-dayne T-dayne вне форума
Начинающий
 
Регистрация: 26.01.2010
Сообщения: 180
Репутация: 31
По умолчанию

Я в свое время делал так:
1)на сервере был txt файл, с номером свежей версии программы.
2)в реестре прописывается ключ с номером текущей версии программы
3)по запросу, скачивается txt файл с свежей версией, сравниваются числа из реестра и из файла, если они различаются - оповещаем о выходе новой версии и предлагаем скачть файл.
Вотъ
Ответить с цитированием
  #8  
Старый 24.11.2010, 19:21
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А можно без реестра.
В самой проге написать:
const Version = '1.23.456';

качать с сервака версию, если больше текущей - то обновлять.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 24.11.2010, 20:38
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

так сделаете???? мне очень надо
Ответить с цитированием
  #10  
Старый 24.11.2010, 20:48
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Сделать - врятли.
Даю ключевые слова:
WinSock, socket(), send(), recv(), connect(), bind(), listen(), accept() и т.д.
Писать придется и сервера, и клиента.
Сервер должен подключать клиентов и слать им строку из текстового файла.
Клиент должен принимать строку и сравнивать со своей. Если расходится - значит посылает запрос на закачку файла.
Когда сервак принимает запрос на скачку, то начинает слать файл. Желательно, чтобы это был архив - так проще. Хоть тупо запихать все файлы в один и написать в начале заголовок.
Я делал в свое время передачу файла по запросу. Передача сама по себе проста - сначала посылаешь размер файла, потом шлешь по запросам через Send пакеты например по 16кб. Можно конечно все сразу, но нехорошо). Клиент же принимает пакет через recv, если его размер меньше 16кб, то ждет остаток (TCP/IP иногда задерживает куски пакетов). После этого шлет запрос на следующий пакет и т.д. Последний пакет ясное дело будет меньше 16кб (хвост файла).
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #11  
Старый 24.11.2010, 21:01
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

так хотябы маленький примерчик за бесплатно
Ответить с цитированием
  #12  
Старый 24.11.2010, 21:15
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

сначала где-нить делаем так:
Код:
 uses WinSock;
 ...
 var sClient,SServer:TSocket;
      addr:sockaddr_in;
      s:AnsiString;
      isize:integer;
 ...
 // Инициализация всякой фигни
  if WSAStartup(MAKEWORD(2, 0), aboutWSA) = 0 then ;

Клиент
Код:
    // Создаём сокет
    sClient := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if sClient = INVALID_SOCKET then
    begin
    mmLog.Lines.Add('Ошибка создания сокета');
    exit;
    end;

    // Заполняем структуру ADDR
    s := EdtIP.text; // тут IP в виде 192.168.56.13
    addr.sin_addr.S_addr := INET_ADDR(PAnsiChar(s));
    addr.sin_family := AF_INET;
    addr.sin_port := htons(7777); // Порт - любое число от 0 до 65535, не занятое никем. лучше брать больше 1000

    // Пробуем подключиться
    if connect(sClient, addr, sizeof(addr)) = SOCKET_ERROR then
    begin
    mmLog.Lines.Add('Ошибка подключения');
    exit;
    end;

    //подключились, работаем
Сервер:
Код:
sServer := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  if sServer = INVALID_SOCKET then
  begin
    mmLog.Lines.Add('Ошибка создания сокета');
    exit;
  end;

  addr.sin_addr.S_addr := htonl(INADDR_ANY);
  addr.sin_family := AF_INET;
  addr.sin_port := htons(7777); // тот же порт, что и у клиента

  if bind(sServer, addr, sizeof(addr)) = SOCKET_ERROR then
  begin
    mmLog.Lines.Add('Ошибка бинд');
    exit;
  end;

  if listen(sServer, 4) = SOCKET_ERROR then
  begin
    mmLog.Lines.Add('Ошибка прослушки');
    exit;
  end;

  mmLog.Lines.Add('Server Started');

  isize := sizeof(addr);

  sClient := accept(sServer, @addr, @isize);
  if sClient = INVALID_SOCKET then
  begin
    mmLog.Lines.Add('Ошибка подключения');
    exit;
  end;
  mmLog.Lines.Add('Подключён ' + inet_ntoa(addr.sin_addr));
// клиент подключился. Если надо постоянно клиентов подключать - в
// цикл все это, начиная с accept(), а клиентов в массив пихать. Для
// каждого лучше запускать отдельный поток.
  closesocket(sServer);
Примерно так.
дальше - Send и Recv. Больше ниче не надобно.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #13  
Старый 25.11.2010, 04:20
ravehog ravehog вне форума
Прохожий
 
Регистрация: 25.11.2010
Адрес: Санкт-Петербург
Сообщения: 7
Репутация: 10
По умолчанию

Примерная схема такова - написать отдельно от клиентской программы второй небольшой EXE-шник для обновления, схема его работы такова:

1) Проверка версий/дат изменений всех критичных к обновлениям файлов у клиента;
2) Отправка этих данных на сервер;
3) Прием файлов, требующих обновления;
4) Запуск непосредственно клиентской программы.

Сервер, видя, что к нему пришел клиент и просит проверить необходимость обновления, смотрит на принятые данные, содержащие версии, даты изменения файлов и т.д. В ответ посылает список файлов, требующих обновления, и затем все эти файлы по очереди по любому протоколу (желательно разграничить каналы для работы других клиентов, и для обновлений - иначе чье-то здоровенное обновление, качаемое GPRS'ом, завесит работу других пользователей).

Для упрощения работы сервера желательно всегда держать в определенном каталоге полную версию клиента последней версии, с которой он будет сверяться и раздавать необходимые файлы подключающимся.

Если к "загрузчику" приделать какую-нибудь заставку и прогрессбар для закачки обновлений - все будет выглядеть очень профессионально и шикарно.
Ответить с цитированием
  #14  
Старый 30.11.2010, 15:34
Аватар для alikoder
alikoder alikoder вне форума
Начинающий
 
Регистрация: 05.12.2007
Сообщения: 126
Репутация: 10
По умолчанию

да еклмн, есть компонент "auto upgrader pro" и усе, если надо пиши в личку, скину крякнутый уже
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter