Hvis din komponent ikke hedder TIdFTPServer, er det ikke Indy du er ved at beskæftige dig med (i hvert fald ikke den udgave der følger med Delphi 2005). Så er det jo lidt svært at vide hvad for en komponent du har.
Jeg kan sige dig så meget at jeg har ikke selv installeret nogle andre komponenter da jeg installerede Delphi 2005. Hvis jeg kigger i de komponenter der med, ER der komponenter til Indy Server, Indy Client, Indy I/O Handlers, Indy Intercepts og Indy misc. Så hvis ikke det er Indy, så ved jeg ikke hvad det er. Udfra det jeg kan se burde Indy v.10 være installeret.
Så skal den nu også hedde TIdFTPServer, det gjorde den da i hvetr fald også i Indy 9 - men har du i det hele taget prøvet det eksempel jeg sendte? Selv hvis din af besynderlige grunde hedder TFTPServer i stedet for TIdFTPServer, kan det jo godt ske princippet er det samme...
Gah - beklager de HTML-entities, det er grundet en fejl i Ekspertens charset-header... den er ikke sat så IE kan fortolke den korrekt, hvilket kan få den til at vælge forkert tegnsæt (Shift-JIS for mit vedkommende) - jeg fik ikke lige skiftet manuelt til den korrekte, så det ender på den måde...
For en god ordens skyld gentager jeg lige:
Så skal den nu også hedde TIdFTPServer, det gjorde den da i hvetr fald også i Indy 9 - men har du i det hele taget prøvet det eksempel jeg sendte? Selv hvis din af besynderlige grunde hedder TFTPServer i stedet for TIdFTPServer, kan det jo godt ske princippet er det samme...
Har hurtigt kigget på det og kan se at de OnEvent der er i eksempelt ikke er de samme som i TFTPServer. Det eksempel er også en FTPklient. Jeg søger for en Server.
Som sagt - det er TIdFTPServer du skal bruge, ikke TIdTrivialFTP. De to ting bruger hver sin protokol, og det er højst sndsynilgt ikke en FTP server du vil alve, men bare en alm. FTP server.
Godt så, nu er jeg med (Er da heller ikke til at hihhe ud af når nu alle Delphi komponenter bgynder med T ^_^;;;)
Så vidt jeg ved skal du blot smide en TIDTrivialFTPServer in på din form, sætte Active til True, og så definere en event handler for OnReadFile der finder ud af at sende filen.
Jeg vil tro det her skulle kunne gøre det: GrantAccess:=true; AStream:=TFileStream.Create(FileName,mOpenRead);
Derudover skal du nok også lige lave en event til OnWriteFile - jeg kunne forestille mig den ikke skal bruges, så du skal bare sætte GrantAccess til False.
Nu har jeg gjort det som udfra din beskrivelse og startet TFTPServeren. Jeg har bootet en pc i PXE, men intet sker. Når jeg stopper programmer får jeg en fejl, der siger:
Exception class EIdSocketError with message 'Socket Error # 10004 Interrupted system call.'
Jeg får en ip fra dhcp serveren og alt ser fint ud fra pc'ens side. Og den står så bare og venter på en TFTP responds.
Desværre, nej - jeg har ikke selv arbejdet med den protokol før, så jeg arbejder udelukkende ud fra det jeg engang kan finde på nettet.
Du kan prøve om den exception kan afhjælpes hvis at lægge TIdTrivialFTPServer.Active:=False; ind i en OnClose på din form, men jeg tvivler lidt - og desuden hjælper det jo ikke på problemet med at der ikke bliver overført noget.
Nu efter jeg har sat bindings til 0.0.0.0:69 og har lavet en OnEvent for OnUDPRead:
procedure TForm1.IdTrivialFTPServer1UDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle); var VPIP : string; VPPort : integer; begin IdTrivialFTPServer1.ReceiveString(VPIP,VPPort); ShowMessage(VPIP); end;
Når jeg starter en pc i PXE får jeg af vide hvilken ip den pc har, men når jeg trykker på ok på ShowMessage(VPIP) stopper programmet og denne fejl opstår:
First chance exception at $77E55DEA. Exception class ERangeError with message 'Range check error'.
Desværre ikke umiddelbart - men jeg har (endelig) fundet et eksempel på en TFTP server lavet med Indy. Du kan prøve at kigge på den, og se hvordan den fungerer, måske kan det hjælpe.
Det var trist. Men lav et svar og du får points, da du gav mig et eksempel hvordan komponenten virker. Jeg kan dog ikke få det helt til at spille, meeeen....
Du skal regne med Indy konstant bliver forbedret, og der er grænser for hvor aktuel udgaven på dine D2005 CD'ere kan være - det er jo sikkert noget til siden de CD'ere er blevet lavet.
Dog tror jeg nok den eneste nyere udgave der p.t. er tilgængelig er en beta udgave - der lader kun til at være mulighed for source build til Delphi 2005. (Men det er selvfølgelig heller ikke svært at kompilere komponenter, så det kunne vel bruges...)
Du kan evt. kigge deres bugtracker igennem og se om der er nogt der minder om det du oplever. Det kan også være at funktionen blot vil have du gør noget mere, omend jeg ikke lige ved hvad. (Du kan muligvis regne det ud ved at se på kildekoden til Indy.)
Så skrap er jeg heller ikke, desværre. Men jeg arbejder på det. ;) Så det er lidt sort snak.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.