Jump to content
BHAMF

Comunicação Com Servidor Para Atualização do Programa

Recommended Posts

BHAMF

Olá! Lá estou eu aqui de volta :)

Minha dúvida é, tem como eu colocar meu programa (Pascal) para se comunicar com um servidor e perguntar para o servidor se existe alguma atualização para tal programa?

Ou seja, o próprio programa verificar se há atualizações para ele mesmo. Só que o problema é saber se isso é possível em Pascal... É possível soldados? Espero a resposta. Obrigado desde já!

08/05/2017 18:34 Brasil (Horário de Brasília)


Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites
nunopicado

Sim, com certeza.

Isso requer alguma estruturação, pois precisas de ter um servidor sempre disponível (recomenda-se redundância, o que obriga a teres código para lidar com ela).

Existem alguns componentes já prontos para isso (salvo erro a TMS tem um), que facilitam a implementação, mas é sempre possível fazer de raiz.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
BHAMF

Sei, a minha estratégia era a seguinte: Como não sei lidar muito ainda com servidores, iria pedir para o meu aplicativo baixar um arquivo de texto, lá teria dizendo se haveria uma atualização nova ou não, caso tivesse, ele baixaria o novo executável dele mesmo só que atualizado, após isso, ele executaria o programa baixado, e o programa baixado excluiria o antigo, tomando assim seu lugar! Porém não tenho a mínima ideia de como fazer isto! Será que podem me ajudar? Obrigado desde já!

 

10/05/2017 11:36 Brasil (Horário de Brasília)


Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites
nunopicado

A estratégia parece-me bem. Ficheiro de texto com a versão actualizada, e ficheiro de update para download (recomendo que seja um ZIP que depois será extraído).

Quanto à forma de fazer, vai depender de vários detalhes de implementação, especialmente de qual compilador vais usar.

 

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
BHAMF

Estou utilizando o Lazarus, não tenho a mínima de ideia quanto os códigos...

 

11/05/2017 18:29 Brasil (Horário de Brasília)


Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites
BHAMF
Em 10/05/2017 às 17:20, nunopicado disse:

A estratégia parece-me bem. Ficheiro de texto com a versão actualizada, e ficheiro de update para download (recomendo que seja um ZIP que depois será extraído).

Quanto à forma de fazer, vai depender de vários detalhes de implementação, especialmente de qual compilador vais usar.

 

Quanto ao ZIP, não irá se necessitar, pois criei um sistema no qual o programa se auto-instala caso os arquivos para o programa funcionar não existam, entáo só precisarei baixar o executável

 

11/05/2017 18:47  Brasil (Horário de Brasília)

Edited by BHAMF
Erros de ortografia

Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites
nunopicado

O que te recomendo é que instales o package Synapse no teu Lazarus.

Entre outras ferramentas, dá-te possibilidade de fazer download de ficheiros da internet.

Tens aqui indicação de como fazer: http://wiki.freepascal.org/Synapse


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
BHAMF

Olá! Prosseguindo com o tópico, eu baixei o package Synapse, mas não estou sabendo como utiliza-lo, achei a função que eu quero no documento que me mandastes, esta é a função que eu quero:

function DownloadFTP(URL, TargetFile: string): boolean;
const
  FTPPort=21;
  FTPScheme='ftp://'; //URI scheme name for FTP URLs
var
  Host: string;
  Port: integer;
  Source: string;
  FoundPos: integer;
begin
  // Strip out scheme info:
  if LeftStr(URL, length(FTPScheme))=FTPScheme then URL:=Copy(URL, length(FTPScheme)+1, length(URL));

  // Crude parsing; could have used URI parsing code in FPC packages...
  FoundPos:=pos('/', URL);
  Host:=LeftStr(URL, FoundPos-1);
  Source:=Copy(URL, FoundPos+1, Length(URL));

  //Check for port numbers:
  FoundPos:=pos(':', Host);
  Port:=FTPPort;
  if FoundPos>0 then
  begin
    Host:=LeftStr(Host, FoundPos-1);
    Port:=StrToIntDef(Copy(Host, FoundPos+1, Length(Host)),21);
  end;
  Result:=FtpGetFile(Host, IntToStr(Port), Source, TargetFile, 'anonymous', 'fpc@example.com');
  if result=false then writeln('DownloadFTP: error downloading '+URL+'. Details: host: '+Host+'; port: '+Inttostr(Port)+'; remote path: '+Source+' to '+TargetFile);
end;

Porém não sei em qual arquivo está as procedures presentes no código acima. Pensava eu que a Synapse era uma unit só, mas é um conjunto de units, como vou saber em qual delas está as funções e procedures presentes no código acima? Obrigado, esperando respostas!

 

B.H.A.M.F | 11:52 19/12/2017 (Horário de Brasília)


Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites
BHAMF

Já está tudo resolvido, podem encerrar o tópico! Já descobri onde se encontrava tal function, ela se encontra na unit ftpSend, a maneira com qual resolvi meu código é esta: 

(os asteriscos são para proteção das minhas informações)
program ftp;
uses
 Crt, blcksock, synautil, synaip, synsock, Classes,
 Sysutils, ftpsend;

begin
 FtpGetFile('**.***.***.***',
 '**',
 '/public_html/index.html',
 'D:\Programas\Programas pascal\testes synapse\ftp\d\index.html',
 '*********',
 '*********'); 
 readln;
end.

{
   function FtpGetFile
   (const IP, //ip do server
   Port,  /porta do server
   FileName, /nome do arquivo junto à sua localização
   LocalFile, /onde o arquivo vai ser colocado ao ser baixado + nome novo do arquivo
   User, /nome de usuário FTP
   Pass: string): Boolean; / senha do servidor FTP
}        

Obrigado à todos do Portugal a Programar! Podem fechar este tópico se quiserem já! :D_

 

B.H.A.M.F | 12:34 19/12/2017 (Horário de Brasília)


Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites
nunopicado

@BHAMF, ainda bem que já resolveste, ia agora a responder-te.
Mas permite-me uma recomendação:

 

begin
 FtpGetFile('**.***.***.***',
 '**',
 '/public_html/index.html',
 'D:\Programas\Programas pascal\testes synapse\ftp\d\index.html',
 '*********',
 '*********'); 
 readln;
end.

 

Nunca, mas mesmo nunca, NUNCA...  :P
Uses caminhos absolutos dentro do programa, especialmente, caminhos locais.

Aquele D:\XPTO\PardaisAoNinho que ali tens é o suficiente para te quebrar o programa caso haja necessidade de reinstalar (ou até de instalar num PC diferente, por exemplo, com o Windows em Inglês).

Aliás, basta a pasta não existir e já tens problemas.
Mesmo que neste caso concreto até possa não ser grave (não sei qual a utilidade desse software), faz com que seja uma regra nunca o fazeres.
 

Ou vais buscar o caminho por parametro do executável, ou num ficheiro de configurações... qualquer coisa. Mas nunca um caminho absoluto.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
BHAMF

Claro, isto já foi corrigido @nunopicado :))  só peguei um trecho do código de exemplo e esqueci de apagar esta parte, obrigado por toda a ajuda do Portugal a Programar!

B.H.A.M.F 08:56 07/01/2018 (Horário de Brasília)

Edited by BHAMF

Brenio Hallison A.M. Filho

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.