Avatar billede kennethv Nybegynder
07. november 2005 - 18:28 Der er 38 kommentarer og
1 løsning

Indy TFTPserver eksempler

Hej eksperter,

Findes der Indy TFTPServer eksempler med Delphi 2005? Jeg kan ikke lige finde dem.

Venligst
Kenneth
Avatar billede kennethv Nybegynder
09. november 2005 - 00:10 #1
Er der slet ikke nogen der kan hjælpe mig?
Avatar billede pidgeot Nybegynder
09. november 2005 - 02:07 #2
http://www.indyproject.org/Sockets/Demos/index.en.iwp

Derinde kan du hente et eksempel med en TIdFTPServer.
Avatar billede kennethv Nybegynder
09. november 2005 - 08:46 #3
Tak, men det er ikke en TFTPserver.
Avatar billede hrc Mester
09. november 2005 - 10:37 #4
Hvad dialekt drejer det sig om? Er det win32 på 2005'eren eller er det .NET?
Avatar billede kennethv Nybegynder
09. november 2005 - 10:43 #5
Det er Win32.
Avatar billede kennethv Nybegynder
09. november 2005 - 10:44 #6
Men .NET er også ok.
Avatar billede pidgeot Nybegynder
09. november 2005 - 10:56 #7
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.
Avatar billede kennethv Nybegynder
09. november 2005 - 11:25 #8
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.
Avatar billede pidgeot Nybegynder
09. november 2005 - 11:27 #9
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...
Avatar billede kennethv Nybegynder
09. november 2005 - 11:31 #10
Jeg har 2 komponenter. Den ene hedder:
TIdFTPServer
den anden hedder:
TIdTrivialFTPServer
Avatar billede pidgeot Nybegynder
09. november 2005 - 11:31 #11
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...
Avatar billede pidgeot Nybegynder
09. november 2005 - 11:32 #12
Så bruger du din TIdFTPServer, sammen med det eksempel jeg linkede til ovenover.

Så vidt jeg ved er der ikke det store der skal laves før det hele er oppe at køre.
Avatar billede kennethv Nybegynder
09. november 2005 - 11:33 #13
Nej, jeg har ikke prøvet det eksempel, da jeg ikke lige udmiddelbart kunne sætte de 2 ting sammen.
Avatar billede kennethv Nybegynder
09. november 2005 - 11:37 #14
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.
Avatar billede pidgeot Nybegynder
09. november 2005 - 11:41 #15
Så kigger du på det forkerte eksempel. Der er to om FTP, den ene til en klient, og den anden til en server.
Avatar billede kennethv Nybegynder
09. november 2005 - 11:46 #16
Ja, det havde du ret i. Jeg har nu kigget på det Server delen, men den har slet ikke de samme OnEvents Som TIdTrivialFTPServer har.
Avatar billede pidgeot Nybegynder
09. november 2005 - 11:51 #17
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.
Avatar billede kennethv Nybegynder
09. november 2005 - 11:56 #18
Det er en TFTP jeg skal bruge til mit foremål. Jeg sidder og arbejder med Pre-boot eXecution Environment (PXE) og der skal der bruges en TFTP.
Avatar billede pidgeot Nybegynder
09. november 2005 - 12:10 #19
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.
Avatar billede kennethv Nybegynder
09. november 2005 - 12:18 #20
Ja, jeg var nu også begyndt at blive lidt irriteret. ;)

Nu har jeg prøvet det du har skrevet, men jeg får en fejl på:
[Error] Unit1.pas(45): E2003 Undeclared identifier: 'mOpenRead'
Avatar billede pidgeot Nybegynder
09. november 2005 - 12:27 #21
Gah - der skulle have stået fmOpenRead ^_^;
Avatar billede kennethv Nybegynder
09. november 2005 - 12:51 #22
Ja, det hjalp.

Kunne du sige mig hvad bindings gør? Og hvad der kunne stå?
Avatar billede pidgeot Nybegynder
09. november 2005 - 13:03 #23
Bindings lader dig specificere hvilke IP-adresser og porte serveren skal lytte på.

Som standard mener jeg den altid lytter på 0.0.0.0:69, dvs port 69 på alle netværksadaptere - det burde være godt nok til dit formål.
Avatar billede kennethv Nybegynder
09. november 2005 - 13:48 #24
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.

Har du nogen ide om hvad der sker?
Avatar billede pidgeot Nybegynder
09. november 2005 - 14:23 #25
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.
Avatar billede kennethv Nybegynder
10. november 2005 - 08:20 #26
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'.

Har du nogen ide?
Avatar billede pidgeot Nybegynder
10. november 2005 - 12:18 #27
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.

http://immortals.fake.hu/delphiportal/modules.php?name=News&file=print&sid=2320
Avatar billede kennethv Nybegynder
10. november 2005 - 16:53 #28
Det ser meget spændende ud, men jeg kan bare ikke køre det. Jeg får en fejl her:

    while Pos('/', Filename) <> 0 do
      Filename[Pos('/', Filename)] := ''; <-------

[Error] Unit1.pas(117): E2010 Incompatible types: 'Char' and 'string'

Hvis jeg fjerne det og trykker på knap 2 får jeg en timeout. Hvis jeg debugger kan jeg se at det sker på:

  IdTrivialFTP1.Put(ST, 'textfile.txt');

Nogen ideer?
Avatar billede pidgeot Nybegynder
10. november 2005 - 17:02 #29
Eftersom kommentaren over den fejlgivende linie siger

{ Convert UNIX style filenames to WINDOWS style }

vil jeg tro der skulle have stået Filename[Pos('/', Filename)] := '\';
Avatar billede kennethv Nybegynder
11. november 2005 - 16:41 #30
Stort.

Har du nogen ide om, hvordan man starter en fil som er blevet overført med denne komponent?
Avatar billede pidgeot Nybegynder
11. november 2005 - 18:02 #31
Nej, desværre. Jeg har ikke så meget forstand på hvordan en PXE fungerer.
Avatar billede kennethv Nybegynder
11. november 2005 - 20:18 #32
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....
Avatar billede pidgeot Nybegynder
11. november 2005 - 20:34 #33
Værsgo :)
Avatar billede kennethv Nybegynder
12. november 2005 - 10:52 #34
Et lille tillægsspørgsmål:

Jeg har en IdTrivialFTPServer komponent på formen og jeg har sat:
Active=true
bindings=0.0.0.0:69

Jeg starter en pc op på PXE og derefter får jeg en Range Check Error og programmet stopper.

Jeg har ikke noget kode på nogen af mine OnEvents.
Gør jeg noget forkert.
Avatar billede pidgeot Nybegynder
12. november 2005 - 11:53 #35
Jeg tror nok det har noget at gøre med de manglende events - men jeg skal dog ikke kunne sige det med sikkerhed.

I teorien kan det jo være en fejl, i hvilket tilfælde du kan prøve at opgradere Indy.
Avatar billede kennethv Nybegynder
12. november 2005 - 12:17 #36
Følger den seneste Indy 10 ikke med Delphi 2005?
Avatar billede kennethv Nybegynder
12. november 2005 - 12:21 #37
Det skal lige siges at jeg havde en OnEvent

procedure TForm1.IdTrivialFTPServer1UDPRead(Sender: TObject; AData: TBytes;
  ABinding: TIdSocketHandle);
begin
  ShowMessage(IdTrivialFTPServer1.Binding.PeerIP);
end;

Den fortalte mig hvilken IP clienten havde. Men jeg fik også fejlen:
"Range Check Error"
Avatar billede pidgeot Nybegynder
12. november 2005 - 12:49 #38
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.)
Avatar billede kennethv Nybegynder
12. november 2005 - 13:03 #39
Så skrap er jeg heller ikke, desværre. Men jeg arbejder på det. ;) Så det er lidt sort snak.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester