Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

TIdFTPServer im Internet

Empfohlene Antworten

Veröffentlicht

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.