Zum Inhalt springen

TIdFTPServer im Internet


Empfohlene Beiträge

Hallo Community,

Ich habe folgendes Problem.

Ich habe ein Testprogramm geschrieben das sowohl FTPServer als auch FTPClient sein kann.

Betreibe ich nun dieses Testprogramm in einem lokalen Netzwerk, einmal als FTPServer und einmal als FTPClient funktioniert die Kommunikation einwandfrei. Der Client kann sich connecten, den Inhalt des Verzeichnises des Servers runterladen und anzeigen und einzelene Dateien runterladen.

Starte ich nun aber den FTPServer auf einem Rechner der mit dem Internet verbunden ist, z.B. mit ISDN

und auf dem Anderen Rechner den Client, der ebenfalls in das Internet kommt.

Kommt es zwar zu einem Connect des Clients auf dem Server, jedoch darf der Client hier die Liste nicht runterladen, als auch keine Datei...

Ich habe keine Idee mehr an was es liegen könnte, da es ja lokal funktioniert.

Ich habe auch schon einen Test gemacht, mit einem anderen FTPServer, den ich aus dem Internet runtergeladen habe.

Ich habe diesen auch auf meinem Rechner gestartet und es geschafft mich mit meinem Client dann an ihn ranzuhängen.

Muss ich in meinem FTPServer irgendwelche Rechte vergeben für den Benutzer das dieser Dateien runterladen darf!?


 FTP = new TIdFTP(NULL);

 FTP->Host         = ip;

 FTP->Username     = "NutzerFTP";

 FTP->Password     = "NutzerFTPpw";

 FTP->Passive      = false;

 FTP->Port         = port + 300;

 FTP->TransferType = ftBinary;

 FTP->Connect();

 TStringList *MyStringList = new TStringList();

  try

  {

   FTP->List(MyStringList,'*',false); // hier ensteht der Fehler

  }

  catch(...)

  {

	Memo1->Lines->Add("Fehler runterladen der DirectoryList");

  }

  ListBox1->Items->Assign(FTP->ListResult);

  ....


 FTPServer->DefaultPort = Port;

 FTPServer->Active = true;

...

//---------------------------------------------------------------------------

void __fastcall TForm6::FTPServerUserLogin(TIdFTPServerContext *ASender,

	  const AnsiString AUsername, const AnsiString APassword,

	  bool &AAuthenticated)

{


  Memo1->Lines->Add("Client Login Requested:");

  Memo1->Lines->Add(AUsername + " - " + APassword);

  AAuthenticated = true;

}

//---------------------------------------------------------------------------

void __fastcall TForm6::FTPServerListDirectory(TIdFTPServerContext *ASender,

	  const AnsiString APath, TIdFTPListOutput *ADirectoryListing,

	  const AnsiString ACmd, const AnsiString ASwitches)

{



  Memo1->Lines->Add("Client Requested Directory Listing");

  Memo1->Lines->Add("HomeDir: "+ ASender->HomeDir + " CurrentDir: "+ ASender->CurrentDir + " Pfad: " +APath);


  TSearchRec f ;

  TIdFTPListItem * listitem = new TIdFTPListItem(NULL);


  AnsiString Pfad = GetCurrentDir();//"E:\\aLx\\";


  if (DirectoryExists(Pfad))

  {

	int a = FindFirst(IncludeTrailingPathDelimiter(Pfad) + "*.*", faAnyFile, f);

	int i = 0;

	while (a == 0)

	{

	  if (f.Attr && faDirectory>0)

	  {

		//AddListItem(ADirectoryListing, f.Name, ditDirectory, f.Size, FileDateToDateTime(f.Time));

		//TIdFTPListItem * listitem = new TIdFTPListItem(NULL);

		ADirectoryListing->Add();

		ADirectoryListing->Items[i]->OwnerName = ASender->Username;

		ADirectoryListing->Items[i]->GroupName = "all";

		ADirectoryListing->Items[i]->UnixOwnerPermissions = "---";

		ADirectoryListing->Items[i]->UnixGroupPermissions = "---";


		ADirectoryListing->Items[i]->ItemType = ditDirectory;

		ADirectoryListing->Items[i]->FileName = f.Name;

		ADirectoryListing->Items[i]->Size = f.Size;

		ADirectoryListing->Items[i]->ModifiedDate = FileDateToDateTime(f.Time);


	  }

	  else

	  {


		ADirectoryListing->Add();


		ADirectoryListing->Items[i]->OwnerName = ASender->Username;

		ADirectoryListing->Items[i]->GroupName = "all";

		ADirectoryListing->Items[i]->UnixOwnerPermissions = "---";

		ADirectoryListing->Items[i]->UnixGroupPermissions = "---";


		ADirectoryListing->Items[i]->ItemType = ditFile;

		ADirectoryListing->Items[i]->FileName = f.Name;

		ADirectoryListing->Items[i]->Size = f.Size;

		ADirectoryListing->Items[i]->ModifiedDate = FileDateToDateTime(f.Time);


	  }

	  a = FindNext(f);

	  i++;

	}



  FindClose(f);

  }

}

//---------------------------------------------------------------------------


Host und Ports stimmen, lokal funktioniert das ganze ja auch

und mit dem Fremden FTPServer auch.

Muss man irgendwelche Rechte am FTPServer festlegen?!

Danke Alx

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn Du bei Deinem FTP-Server passiv=false setzt, bedeutet dies aktives FTP.

Ich vermute ganz stark, dass dann einfach nicht die korrekte öffentliche IP-Adresse mitgeteilt wird, wenn es über Internet gehen soll.

Auch im passiven Modus sendet der Server seine IP-Adresse und den neu geöffneten Port an den Client. D.h. auch diese IP muss für den Client übers INet erreichbar sein, aber den Server hast Du im Griff, deswegen wäre das meine erste Wahl.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...