ftp com TIPCLIENT do XHB

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

ftp com TIPCLIENT do XHB

Mensagem por cjp »

Como assim definir porta, José? Se vc estiver falando da linha oFTP:nDefaultPort := eFTPPORTA ou da linha #define eFTPPORTA 21, eu as desabilitei para testar, mas assim também não funcionou.

Marcos, verifiquei, está tudo em minúscula. Até testei mudando para maiúsculas, mas também não funciona.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

ftp com TIPCLIENT do XHB

Mensagem por cjp »

Meus amigos,

Será que não existe um jeito de a TIPCLIENT voltar a funcionar?

Estou precisando muito dessa função.

Alguém me ajuda, por favor?
Inacio de Carvalho Neto
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ftp com TIPCLIENT do XHB

Mensagem por fladimir »

Se ja tentou com o xHarbour e não deu tenta com o HARBOUR pra testar, eu uso o Harbour e a tipclient direto todos os dias em diversos clientes e funciona bem.


[]'s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

ftp com TIPCLIENT do XHB

Mensagem por cjp »

Eu uso o Harbour, não o Xharbour.

Saberia me dizer por que comigo não funciona mais? Sempre funcionou, mas há alguns meses parou de funcionar, inexplicavelmente.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

ftp com TIPCLIENT do XHB

Mensagem por Jairo Maia »

Olá Inácio (cjp),

Já tentou entrar em contato com o suporte do seu provedor para saber se houve alteração de porta? Pergunto porque desde 01/01/2013 os provedores no Brasil desativaram as portas consideradas vulneráveis.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ftp com TIPCLIENT do XHB

Mensagem por fladimir »

CJP seus problemas acabaram.... Não é produto tabajara e sim um pequeno erro de lógica....

Eu peguei seu código e compilei e rodei linha a linha com o DEBUG (q uso muito e me ajuda muito) e percebi o erro de lógica que vou transcrever no teu código abaixo e comentar, lembrando q tive q fazer alguns ajustes pra poder funcionar, mas nada q afetasse a real necessidade.

Código: Selecionar todos

//--> Esta parte esta abaixo da function enviaftp, mas eu por questão de forma de trabalho coloquei acima, mas isso não é o problema ok...
#include "inkey.ch"
#include "fileio.ch"
#include "common.ch"
#include "Directry.ch"
#define eFTPSERVER1 'ftp.meuenderecoftp.com.br'    // ENDEREÇO SERVIDOR FTP 01
#define eFTPPORTA 21              // PORTA DO FTP PARA BAIXAR ATUALIZAÇÕES DO SISTEMA
#define eFTPUSER  'myuser'          // USUARIO DO FTP PARA BAIXAR ATUALIZAÇÕES DO SISTEMA
#define eFTPPASS  'mypassword'           // SENHA DO FTP PARA BAIXAR ATUALIZAÇÕES DO SISTEMA

function enviaftp()
altd() //--> chamo o debug pra acompanhar
   arqv := 'testeftp.exe'  //->meu arquivo a ser enviado pro FTP pra testar
   pasta := 'www\'    //-> minha pasta a ser changed qdo logar no FTP
	aDir0 := directory(arqv)
   IF UPLOAD_ARQ( alltrim(pasta), alltrim(arqv) ) = .F.
      @ maxrow(),1 say "Arquivo não enviado                               "
      tone(261.7,23)
      inkey(10)
      return .f.
   else
      return .t.
   ENDIF
   RETURN NIL

STATIC FUNCTION UPLOAD_ARQ( FTPDIR, farq )
   Local cUrl, oUrl, oFTP, cFTPSERVER:=''
   LOCAL vzerr := 0, cLista:=''   //--> criei aki como local pq a primeira vzerr dava erro q eu não tinha essa variavel talvez no teu código macro estivesse vindo como public ou private de alguma chamada anterior, porém aki pra efeito de testes defini como zero e local os valores iniciais, e a outra eu explico mais abaixo.
   cFTPSERVER:=eFTPSERVER1
   cUrl := "ftp://" + eFTPUSER + ":" + eFTPPASS + "@" + cFTPSERVER
   oUrl       := tUrl():New( cUrl )
   oFTP       := tIPClientFtp():New( oUrl, .F. )
   oFTP:nConnTimeout := 20000
   oFTP:bUsePasv  := .T.
   oFTP:nDefaultPort := eFTPPORTA //PORTA DO FTP
   oFTP:oUrl:cUserID := eFTPUSER
   oFTP:oUrl:cServer := cFTPSERVER
   oFTP:oUrl:cPassword := eFTPPASS
   IF oFTP:Open( cUrl )
   
		clista:=oFTP:List()   //--> isso aki eu uso pra ver o conteudo da onde estou no FTP é tipo um comando DIR, pq ai no debug eu vejo o conteudo desta variavel durante a execução do código acompanhando seu valor
      
//--> aki é o X da questão, observe q vc mandou ele trocar de diretório mas se não achar cria, PORÉM SE ACHAR ELE JÁ TROCOU ENTENDE...
		IF !oFTP:Cwd(ftpdir) // se não achar o diretorio ele cria
         cria="N"
         if us="I"
            @ maxrow(),1 say "Pasta "+ftpdir+" inexistente no FTP; criar a pasta?"get cria pict "@!"
            tone(261.7,33)
            read
         endif
         if cria="S"
            oFTP:MKD(ftpdir)  // cria o diretorio
         else
            return .f.
         endif
      ENDIF                                                    

// ESSE IF ABAIXO ESTA ANALISANDO SE MUDAR DE PASTA NÃO DER CERTO AI MANDA UM EMAIL E RETORNA FALSO, PORÉM A CONDIÇÃO ACIMA É VERDADEIRA ELE JÁ ENCONTRA A PASTA E MUDA AUTOMATICAMENTE A CONDIÇÃO ABAIXO SE NÃO TIVER OUTRA PASTA COM O MESMO NOME VAI RETORNAR FALSO, DANDO A IMPRESSÃO QUE NÃO ESTA FUNCIONANDO, PORÉM A LÓGICA É Q FAZENDO COM Q RETORNE FALSO POIS NÃO TEM OUTRA PASTA DE MESMO NOME.

/*
      if oFTP:Cwd(ftpdir)=.f.   // muda o diretorio
         if vzerr=1 .or. int(vzerr/15)=vzerr/15
			   mandmail1("","Retornou .f. no cwd; COMUNS 431")
         endif
         vzerr++
         return .f.
      ENDIF
*/
      if oFTP:reset()=.f.  //--> ESSA CONDIÇÃO EU NÃO USO NO MEU CÓDIGO E NÃO SEI EXPLICAR PORÉM AO TESTAR NÃO INFLUENCIOU.
       //  mandmail1("","Retornou .f. no reset; COMUNS 438")
         return .f.
      endif

//--> O RESTANTE BLZ VAI Q VAI...
      if oFtp:UploadFile( farq )=.f.  
         if usooff#"S"
            @ maxrow(),1 say "Não é possível enviar o arquivo"
         endif
         return .f.
      endif
      oFTP:Close() // fecha a conexão do FTP
   ENDIF
RETURN( .T.)
Dá uma olhada aí e me fala se deu certo ou se eu viajei na maionese e seu problema continua...

Abraço

Sucesso!!
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

ftp com TIPCLIENT do XHB

Mensagem por cjp »

De fato, amigo, estava errada minha função. Agora funcionou. Muito obrigado.
Inacio de Carvalho Neto
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ftp com TIPCLIENT do XHB

Mensagem por fladimir »

CJP, q bom q deu certo.

[]'s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

ftp com TIPCLIENT do XHB

Mensagem por cjp »

Colegas,

Mais uma vez esta função está dando erro.

A função que está dando erro é assim:

Código: Selecionar todos

Function listaftp(pasta)
   ftpproto ="ftp://" //posthilit">ftp://"
   ftpserver = ftps // posthilit">ftp.servidor.com.br"  endereço de ="posthilit">FTP</span> do site
   ftpuser = "inaciobr"   //Usuário da conta ="posthilit">FTP</span>
   curl:=ftpproto+ftpuser+":"+snhftp+"@"+ftpserver
   oUrl:= turl():new(curl)
   oCred:= tIPCredentials()
   oFtp:= tipclientftp():NEW(oUrl,,.T.)
   oFTP:nConnTimeout := 20000
   oFTP:bUsePasv     := .T.
   IF oFTP:Open()
       if oFTP:Cwd(pasta)=.f.
          return .f.
       endif			   
       clista:=oFTP:List()
       if usebase("arqbx","S")=.t.
          dele all
          pack
          clista=substr(clista,40)
          do while .t.
              if empty(clista) .or. at("www.ina",clista)=1
                 exit
              endif
              nrfinal=at(".",substr(clista,1,10))+3
              if at(".",substr(clista,nrfinal,5))=0
                append blank
                repl nome with substr(clista,1,nrfinal)
              else
                  nrfinal=nrfinal+4
              endif						
              clista=substr(clista,nrfinal+42)
              if len(clista)<5
                 exit
              endif
        enddo
      else
          return .f.
      ENDIF
  else
     return .f.
  endif
  oFTP:Close()
Return .t.

O erro está dando na abertura da pasta do FTP, nesta lista:

Código: Selecionar todos

	        if oFTP:Cwd(pasta)=.f.
Não consigo entender por que ele não consegue abrir a pasta, sendo que a pasta existe no FTP.

O pior é que o erro acontece apenas de vez em quando, não é em todas as vezes.

Tem algum jeito de descobrir a razão disso?
Inacio de Carvalho Neto
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ftp com TIPCLIENT do XHB

Mensagem por fladimir »

Qual o erro q aparece?

Eu testei aki, direcionando pro meu ftp, usuário e senha e definindo uma pasta do mesmo na variável PASTA e não processando a função usabase q não é pertinente ao assunto no meu ponto de vista e acompanhando via DEBUG deu tudo certo...

Teríamos q analisar o erro pra podermos ter uma ideia melhor.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

ftp com TIPCLIENT do XHB

Mensagem por cjp »

Então, o problema é que eu não consigo saber qual o erro. Aliás, nem é propriamente um erro. Apenas a linha

Código: Selecionar todos

if oFTP:Cwd(pasta)=.f.
retorna .f., sem qualquer explicação, pois a pasta existe no FTP.

E o pior é que isso não acontece sempre. Às vezes retorna .t., às vezes .f.

Tem como ao menos eu conseguir saber a razão disso?
Inacio de Carvalho Neto
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ftp com TIPCLIENT do XHB

Mensagem por fladimir »

Não tenho idéia... dá impressão q seja algo com o Servidor onde vc hospeda, mas não dá pra saber...

Vc experimentou outra versão do xHB pra comparar a nível de testes?

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

ftp com TIPCLIENT do XHB

Mensagem por Jairo Maia »

Olá Inácio,

Já tentou usar um temporizador? Por exemplo:

Código: Selecionar todos

nTentativas := 1
While oFTP:Cwd(pasta)=.f.
  InKey( .5 )  // aguarda 1/2 segundo
  nTentativas++
  If nTentativas = 3  // após 3 tentativas p.e.
    Hb_Alert( "Falha na conexão com o servidor.;Tente novamente depois." )
    Return .f.
  EndIf
EndDo
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

ftp com TIPCLIENT do XHB

Mensagem por fladimir »

Boa ideia Jairo... já q o problema é esporádico pelo q o colega afirmou, pode ser algo a nível de conexão FTP com o server q hospeda, então a ideia de fazer um laço com 1 temporizador é uma possibilidade.

[]´s
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

ftp com TIPCLIENT do XHB

Mensagem por cjp »

Realmente é uma boa ideia, Jairo. Não tinha pensado nisto antes.

Implantei essa modificação agora. Vou testar e depois informo.

Obrigado por enquanto.
Inacio de Carvalho Neto
Responder