Hvordan implementeres retr/list kommandoer til FTP klient

Tags:    java ftp

Hej

Jeg er i gang med at lave en FTP klient. Jeg har kunnet forbinde den til en server. Mit problem er, at jeg ikke ved hvordan jeg skal implementere retr/list kommandoer til klienten, så mit spørgsmål er om der nogen, der kan hjælpe mig med det?

På forhånd tak




4 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Den eneste autoritet, og korrekte måde at implementere sådanne protokoller på, er at finde den officelle standard: https://www.ietf.org/rfc/rfc959.txt . Den kan godt være hård at tygge igennem så det kan være en gode ide at finde mere "bløde" kilder og referencer http://www.nsftools.com/tips/RawFTP.htm og http://en.wikipedia.org/wiki/File_Transfer_Protocol.

Men til dit specifikke spørgsmål. For at implementere LIST sender du blot på din "Control Connection": LIST<CR><LF> , hvor CR er carriage return (\r), og LF er linefeed (\n). For RETR er der en ekstra parameter, nemlig filstien du vil hente, RETR MY/FILE.DATA .

Indtil videre er det ikke så komplekst, men du skal huske på en masse tilstand i din klient. F.eks. er du i ACTIVE mode eller PASSIVE mode. Har du opsat det til STREAM eller BLOCK transfer? Hvad er din format? ASCII, IMAGE (binary???) eller EBCDIC? Afhængig af disse indstillinger vil det variere hvordan overførslen skal forstås. Så er der også fejlhåndtering. Heldigvis siden du laver klienten kan du kontrollere mange af disse ting, og kan måske udeladet at implementere visse af dem.

Så lad os simplificere. Du vil blot overføre en tekstfil, du vil bruge PASV (passiv mode). Noget i stil med det her (klienten til venstre, og serverens svar til højre):

Fold kodeboks ind/udKode 


Denne status besked parser du for at læse de 6 tal, de første 4 er IP, de sidste to tal udgør porten. Omkring nu eller efter næste kommando åbner du en ny socket til PORT = 256 * 101 + 33 = 25889 på samme IP som serveren. Som udgangspunkt, hvad jeg lige kunne læse mig frem til, er du i STREAM mode, hvilket betyder at der blot overføres en strøm af bytes, enten den ene, eller den anden vej, samt i ASCII format. Denne nye forbindelse bliver lukkes når der ikke er mere at overføre.

Fold kodeboks ind/udKode 


Når du åbner den anden data-forbindelse på 25889, hvis du ikke allerede har gjort det, vil serveren sende dig filen på den nye socket og efterfølgende lukke forbindelsen. Det er så din opgave at gemme indholdet du modtog. På din Control-Connection vil du også modtage en status-kode f.eks.:
Fold kodeboks ind/udKode 





Indlæg senest redigeret d. 13.04.2015 22:59 af Bruger #14645
Endnu en mulighed kilde til "dokumentation" er at installere Wireshark og så ellers sniffe på en fungerende FTP session.



Jeg har fået LIST kommandoen til at virke. Jeg ved bare ikke hvordan jeg skal implementere RETR



Her er en simpel FTP-server som jeg engang skrev til en Netduino. Den har en fungerende RETR-funktion. Den er dog i C#, men det burde være forståeligt for dig:

http://ntools.codeplex.com/SourceControl/latest#Networking/Networking/FTP/FtpSession.cs





t