AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdFTP List Befehl unter Vista?
Thema durchsuchen
Ansicht
Themen-Optionen

TIdFTP List Befehl unter Vista?

Ein Thema von Angel4585 · begonnen am 10. Aug 2007 · letzter Beitrag vom 10. Aug 2007
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

TIdFTP List Befehl unter Vista?

  Alt 10. Aug 2007, 08:07
Hallo,

ich habe das Problem, dass meine TIdFTP Komponente unter Vista ewig auf ein Ergebnis bei der Funktion "List" wartet.
Ich konnte die Zeile lokalisieren wo er ewig wartet.
In der Unit idTCPClient der Indys:
Delphi-Quellcode:
procedure TIdTCPClientCustom.Connect;
begin
  // Do not call Connected here, it will call CheckDisconnect
  EIdAlreadyConnected.IfTrue(Connected, RSAlreadyConnected);
  if IOHandler = nil then begin
    IOHandler := MakeImplicitClientHandler;
    IOHandler.OnStatus := OnStatus;
    ManagedIOHandler := True;
  end;
  try
    // Bypass GetDestination
    if FDestination <> 'then begin
      IOHandler.Destination := FDestination;
    end;

{BGO: not any more, TIdTCPClientCustom has precedence now (for port protocols, and things like that)
    // We retain the settings that are in here (filled in by the user)
    // we only do this when the iohandler has no settings,
    // because the iohandler has precedence
    if (IOHandler.Port = 0) and (IOHandler.Host = '') then begin
      IOHandler.Port := FPort;
      IOHandler.Host := FHost;
    end;
}


    IOHandler.Port := FPort; //BGO: just to make sure
    IOHandler.Host := FHost;
    if IOHandler is TIdIOHandlerSocket then begin
      TIdIOHandlerSocket(IOHandler).IPVersion := FIPVersion;
    end;

    if FConnectTimeout > 0 then begin
      IOHandler.ConnectTimeout := FConnectTimeout;
    end;
    if FReadTimeout > 0 then begin
      IOHandler.ReadTimeout := FReadTimeout;
    end;

    IOHandler.Open;//<---------- Hier hängt er!!
    if IOHandler.Intercept <> nil then begin
      IOHandler.Intercept.Connect(Self);
    end;

    DoStatus(hsConnected, [Host]);
    DoOnConnected;
  except
    IOHandler.Close;
    raise;
  end;
end;
Was ich interessant finde: Ein paar Zeilen obendran wird eine IP-Adresse und ein Port zugewiesen.
Beide habe ich nirgenwo eingetragen, die IP-Adresse ist aus dem lokalen Netzwerk(192.168.115.20) und der Port ist immer unterschiedlich.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TIdFTP List Befehl unter Vista?

  Alt 10. Aug 2007, 08:08
Schon mal die Vista-Firewall testweise ausgeschaltet?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TIdFTP List Befehl unter Vista?

  Alt 10. Aug 2007, 08:19
Ja testweise bei der Installation.. die ist aus
ich bin mal noch weiter in den Code rein.
In der idStackWindows:
Delphi-Quellcode:

procedure TIdStackWindows.Connect(const ASocket: TIdStackSocketHandle;
 const AIP: string; const APort: TIdPort;
 const AIPVersion: TIdIPVersion = ID_DEFAULT_IP_VERSION);
var
  LAddr: TSockAddrIn;
  Addr6: TSockAddrIn6;
begin
  case AIPVersion of
    Id_IPv4: begin
      LAddr.sin_family := Id_PF_INET4;
      TranslateStringToTInAddr(AIP, LAddr.sin_addr, Id_IPv4);
      LAddr.sin_port := HToNS(APort);
      CheckForSocketError(IdWinsock2.Connect(ASocket, @LAddr, SizeOf(LAddr)));
    end;
    Id_IPv6: begin
      Addr6.sin6_flowinfo:=0;
      Addr6.sin6_scope_id:=0;
      Addr6.sin6_family := Id_PF_INET6;
      TranslateStringToTInAddr(AIP, Addr6.sin6_addr, Id_IPv6);
      Addr6.sin6_port := HToNs(APort);
      CheckForSocketError(IdWinsock2.Connect(ASocket, psockaddr(@Addr6), SizeOf(Addr6)));//Wenn ich hier einen Haltepunkt mache und dann F7 drücke hängts.. also vmtl die Zeile in der was bzw. nix passiert
    end;
    else begin
      IPVersionUnsupported;
    end;
  end;
end;
Seltsam ist ja, dass er beim erstenmal durchläuft mit der Adresse und dem Port vom Proxy und beim zweitenmal wo er das durchläuft hat er ne falsche IP und falschen Port.

Edit: Der erste Durchlauf ist der TIdFTP.Connect, der Zweite TIdFTP.List
Edit2:
Ich hab mal geschaut wo er diese seltsame IP herbekommt.
In der IdFTP:
Delphi-Quellcode:
procedure TIdFTP.SendInternalPassive(const ACmd: String; var VIP: string;
  var VPort: integer);
var
  i,bLeft,bRight: integer;
  s: string;
begin
  SendDataSettings;
  SendCmd(ACmd, 227); {do not localize}
  s := Trim(LastCmdResult.Text[0]);//Hier wird die eingelesen und später zugewiesen
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TIdFTP List Befehl unter Vista?

  Alt 10. Aug 2007, 09:05
OK, also das Problem habe ich gefunden:

Wenn ich versuche von meinem Rechner hier aus eine passive Verbindung zu meinem FTP-Ordner aufzubauen, dann bekomm ich ewig keine Antwort.

Bei FileZilla funktioniert es passiv auch nicht, allerdings macht es dann auf aktiv und dann geht es.
Was muss ich jetzt alles machen damit mein eigener Client auch aktiv kann?
Nur das Flag setzen wird wohl nicht genügen oder?
Martin Weber
Ich bin ein Rüsselmops
  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 05:43 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