AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Verbindung zum FTP-Server über mehrere Prozeduren hinweg
Thema durchsuchen
Ansicht
Themen-Optionen

Verbindung zum FTP-Server über mehrere Prozeduren hinweg

Ein Thema von Samufi · begonnen am 29. Okt 2009 · letzter Beitrag vom 29. Okt 2009
Antwort Antwort
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#1

Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 14:35
Hallo,
ich schreibe gerade an einem Programm, das sehr häufig kontakt zu einem ftp-Server aufnimmt und Dateien hoch- und runterlädt. Dazu benutzte ich bisher immer folgende Funktionen:
Delphi-Quellcode:
function TForm1.putfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var
  hopen, hconnect: HINTERNET;
begin
  hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
  Result := FtpPutFile(hconnect, pchar(localfile), pchar(remotefile), FTP_TRANSFER_TYPE_UNKNOWN, 0);
  InternetCloseHandle(hconnect);
end;

function TForm1.getfile(server, username, password, remotefile, localfile: string; port: word = 21): boolean;
var
  hopen, hconnect: HINTERNET;
begin
  hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
  Result := FtpgetFile(hconnect, pchar(remotefile), pchar(localfile), false, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII,0);
  InternetCloseHandle(hconnect);
end;
Nun dachte ich mir, dass es doch evtl. viel Zeit sparen würde, wenn man nicht jedesmal neu eine Verbindung zum Server aufnimmt und diese dann schließt (das kam mehrmals während einer Prozedur vor), sondern zum Programmstart die Verbindung eingeht und zum Ende diese wieder schließt. Dazu wollte ich dann hconnect global definieren, damit dann beim ftpputfile darauf zugegriffen werden kann. Vielleicht ist dieser Gedankengang etwas dilettantisch, ich kenne mich mit der Materie halt nicht so gut aus. Auf jeden Fall hat das so nicht hingehauen - ich nehme an, ich habe da einen groben Denkfehler drin.
Hat vielleicht jemand von euch eine Idee, wie ich das richtigmachen könnte - bzw. kann mir jemand sagen, ob das überhaupt geht?
Allen Antwortern schon mal vielen Dank im Vorraus!
Samufi
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 14:40
wenn du verbunden bist bist du verbunden ^^ nach ner procedure wird die verbindung net unterbrochen außer vom FTP aus wegen inaktivität.

bau doch ne abfrage hinein mit "if not FTP.Connected then" und rufst nur dann eine procedure auf ^^
  Mit Zitat antworten Zitat
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 15:00
Danke für die Antwort!
Aber was setze ich dann für hconnect ein? Das müsste ich dann doch global definieren oder nicht?! Bisher hats noch nicht funktioniert (vielleicht stelle ich mich auch beim globalen definieren falsch an...) Muss ichs überhaupt global definieren, wenn ja, wie mache ich das richtig?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 15:21
Du solltest sämtlichen Code, der für den Zugriff auf den FTP-Server zuständig ist in einer Klasse kapseln.
Dein Formular legt dann ein Objekt dieser Klasse an, öffnet zu Beginn den FTP-Server und
kann dann über die bestehende Verbindung bequem Dateien hoch- und runterladen.

Du hast Glück, denn ich habe so eine Klasse schon vor längerer Zeit geschrieben.
http://www.delphipraxis.net/internal...ct.php?t=26504

PS: globale Handles sind Mist! Kapseln in Klassen ist der saubere Weg
Andreas
  Mit Zitat antworten Zitat
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 15:36
Hmmm, ich hab jetzt dein InetTools eingebunden, aber ich hab irgendwie noch keinen Plan, wie ich damit jetzt umgehe. Könntest du mir vielleicht ein ungefähres Beispiel für den Quellcode geben, mit dem ich das hconnect global zugänglich machen kann? (Vielleicht hab bin ich immer noch auf dem falschen Dampfer... )
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 15:47
Es ist ein Beispielprojekt dabei, in dem alle Methoden demonstriert werden.
Du brauchst dich um keine Handles mehr zu kümmern.
Aber mal so als Kurzeinstieg:
1.) Objekt im Formular deklarieren
Delphi-Quellcode:
  uses ...., InetTools;

  TForm1 = class(TForm)
  ....
  private
    { Private-Deklarationen }
    ftp : TInetFTP;
  ..
  end;
2.) Objekt erzeugen (und zerstören)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
   ftp := TInetFTP.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
   ftp.Free;
end;
3.) FTP-Server (einmalig) öffnen
Delphi-Quellcode:
ftp.Server := 'ftp.wasauchimmer.com'
ftp.User := 'anonymous';
ftp.Password := 'egal';
ftp.Connect(True);
4.) Dateien hoch- und runterladen
Delphi-Quellcode:
ftp.GetFile('testfile.txt', 'C:\testfile.txt'); // download
ftp.PutFile('C:\autoexec.bat', 'a.bat'); // upload
Andreas
  Mit Zitat antworten Zitat
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Verbindung zum FTP-Server über mehrere Prozeduren hinweg

  Alt 29. Okt 2009, 15:49
Vielen Dank!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz