Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146

    [Python]FTP ALLA LETTERA

    Vorrei ricreare ftp alla lettera.
    Ho studiato il protocollo, ma non capisco come sapere quando il serever genera più di una risposta.
    Se invia una sola risposta è ok.
    Ma se ne invia un altra non la intercetto.
    C'è un modo per sapere se ne sta inviando un altra???
    C'è una logica tras un messaggio e l'altro???

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146
    Riformulo meglio la domanda.
    Nel protocollo ftp il server può inviare più risposte consecutive.
    C'è un modo per sapere quante risposte devo aspettarmi?
    O devo temporizzare il tutto?Esempio:
    Metto in coda tutti messaggi che arrivano nell'arco di 20ms nella speranza di intercettarli tutti.

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ricevi finchè il server non ha piu' niente da inviarti.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146
    E io come faccio a sapere quando il server ha finito di inviare??
    Considera che ci possono essere degli intervalli inregolari tra una risposta e l'altra. Quindi non posso neanche dire per 5 secondi ricevi tutto quello che invia, perchè potrei non intercettare i messaggi dopo.
    Come fare??

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Non so in Python, ma in C solitamente si usa dare recv finche i bytes ricevuti sono > 0
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146
    Si ma anche se vedi i byte ricevuti > di 0 come fai a capire che il server ftp ha inviato tutte le risposte consecutive??
    Se si fa come dici tu si verifica soltanto che è stato ricevuto qualcosa, ma non se è stato ricevuto tutto!!!

  7. #7
    Vorrei ricreare ftp alla lettera.
    Sai che c'è gia ftplib nella libraria standard?
    http://docs.python.org/library/ftplib.html

    Ho studiato il protocollo, ma non capisco come sapere quando il serever genera più di una risposta.
    Se invia una sola risposta è ok.
    Ma se ne invia un altra non la intercetto.
    C'è un modo per sapere se ne sta inviando un altra???
    C'è una logica tras un messaggio e l'altro???
    In genere quando il client manda un comando segue una unica risposta del server.

    E io come faccio a sapere quando il server ha finito di inviare??
    Quando la "linea" che ti arriva termina con CRLF, ovvero "\r\n".
    Come detto, se proprio hai intenzione di reinventare la ruota, tutto il codice te lo ritrovi gia pronto in ftplib.py, da cui puoi prendere spunto.
    Se vuoi dare uno sguardo al codice di un server per vedere come funzionano le cose "dall'altro lato" puoi vedere la mia pyftpdlib (link in firma).

    Saluti
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    146
    1)Devo ricrearlo io senza l'aiuto della libreria.
    Lo devo fare per gli esami.
    2)Il protocollo ftp dice, CHIARAMENTE, che quando si invia un comando possono seguire una o più risposte e tutte terminanti con i due caratteri speciali \r\n.
    3)Ora do un occhiata al tuo codice e ti so dire

  9. #9
    2) Il protocollo ftp dice, CHIARAMENTE, che quando si invia un comando possono seguire una o più risposte e tutte terminanti con i due caratteri speciali \r\n.
    E' così infatti, ma molto raramente capita.
    Un possibile caso potrebbe essere quello in cui il server decide di chiudersi per fatti suoi nel qual caso ti manda un messaggio di sua iniziativa del tipo "4xx mi sto chiudendo" ma è qualcosa che succede molto di rado, in genere si chiude e basta.

    Io stesso, in pyftpdlib, non ho implementato nessuna risposta "a sorpresa" di questo tipo e ipotizzo che la maggior parte dei server esistenti abbia fatto lo stesso.

    A mio parere è una casistica che in fase di sviluppo iniziale puoi tranquillamente evitare di prendere in considerazione.

    1)Devo ricrearlo io senza l'aiuto della libreria.
    Lo devo fare per gli esami.
    Capito. In tal caso torno a suggerirti di prendere spunto da ftplib.py.
    FTP non è eccessivamente complesso. L'unica rottura è il fatto che hai due connessioni separate da gestire (canale comandi e dati) anzichè una, un parallelismo che devi risolvere utilizzando uno dei seguenti approcci:

    - asincrono (quello che ho usato sviluppado pyftpdlib, tipicamente basato su select(), poll() e similari. puoi utilizzare, asyncore/asynchat della libreria standard, Twisted o similari)
    - multi thread (modulo threading)
    - multi processo (os.spawn() o il modulo multiprocessing di Python 2.6)

    Ciao
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.