aLeXanDer.. Geschrieben 1. April 2009 Geschrieben 1. April 2009 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 Zitieren
VaNaTiC Geschrieben 1. April 2009 Geschrieben 1. April 2009 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. Zitieren
aLeXanDer.. Geschrieben 1. April 2009 Autor Geschrieben 1. April 2009 Die Aussage war Gold wert. Danke Zitieren
Empfohlene Beiträge
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.