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):
User MyUser
331 User name ok, need password
Pass UltimateSecret
230 User logged in
PASV
227 Entering Passive Mode (123,45,67,89,101,33)
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.
RETR SECRET_FOLDER/NuclearCodes.txt
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.:
226 Transfer Complete
Indlæg senest redigeret d. 13.04.2015 22:59 af Bruger #14645