Mini Ftp

Programmation d'applications complexes
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Mini Ftp

Message par Chris »

Salut :)

Je cherche à faire un mini client ftp, avec juste les fonctions de base qui me permettraient d'envoyer des fichiers sur mon site, sans avoir à lancer une usine à gaz pour trois fois rien.

J'ai donc commencé en faisant ça:
(Soit dit en passant, j'ai piqué une partie du code se trouvant dans la procédure Send, dans le post sur l'Anti-Spam.
On va pas s'emm....er, non plus... :lol:)

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ExplorerTree_Ftp
  #ExplorerTree_Local
  #Message
EndEnumeration

Global NetID

Adresse$ = "ftp.monsite.com" ;<-- Serveur ici
Login$ = "MonLogin" ;<-- Login ici
Pass$ = "MonPass" ; <-- Mot de passe ici

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 535, 400,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "Mini-Ftp")
    If CreateGadgetList(WindowID())
      ExplorerTreeGadget(#ExplorerTree_Local, 5, 5, 260, 210, "")
      ExplorerTreeGadget(#ExplorerTree_Ftp, 270, 5, 260, 210, "")
      EditorGadget(#Message, 5, 220, 525, 175) 
    EndIf
  EndIf
EndProcedure

Procedure Send(texte.s)
  Eol.s = Chr(13) + Chr(10)
  SendNetworkString(NetID, texte + Eol)
  Repeat 
    FreeMemory(0) 
    *Buffer = AllocateMemory(0,2000) 
    ReceiveNetworkData(NetID,*Buffer,2000) 
  Until NetworkClientEvent(NetID) <> 2
  ProcedureReturn UseMemory(0)
EndProcedure

Open_Window_0()

InitNetwork()

*Buffer = AllocateMemory(0,2000) ; Buffer pour recevoir les données 
NetID = OpenNetworkConnection(Adresse$, 21)
ReceiveNetworkData(NetID,*Buffer,2000) : AddGadgetItem(#Message,-1,PeekS(*Buffer))

*Ret = Send("USER"+Login$) : AddGadgetItem(#Message,-1,PeekS(*Ret))
*Ret = Send("PASS"+Pass$)  : AddGadgetItem(#Message,-1,PeekS(*Ret))
*Ret = Send("SYSTEM")  : AddGadgetItem(#Message,-1,PeekS(*Ret))
*Ret = Send("LIST")  : AddGadgetItem(#Message,-1,PeekS(*Ret))
*Ret = Send("QUIT")  : AddGadgetItem(#Message,-1,PeekS(*Ret))

CloseNetworkConnection(NetID)

Repeat
  Select WaitWindowEvent()
    Case #PB_EventGadget
      Select EventGadgetID()
        Case #ExplorerTree_Ftp
      
        Case #ExplorerTree_Local
      
      EndSelect
    Case #PB_Event_CloseWindow
      quit = 1
  EndSelect
Until quit = 1
End
;
Le problème, c'est que je ne connais pas les commandes.

J'ai essayé de faire afficher le contenu de mon site sur l'editeur, mais je n'ai rien qui s'affiche.
En plus, j'ai l'impression que les chaines retournées par le serveur, le sont avec une commande de retard, ce qui fait que la chaine concernant la dernière commande, n'est jamais retournée.

Vous n'avez rien compris...??. Rassurez vous, moi non plus :lol:

Bref, si quelqu'un pouvait m'expliquer brièvement, sans me renvoyer sur un site web, (salemioche.com, pour ne citer que lui), ce serait sympa.

Chris :)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Vous n'avez rien compris...??. Rassurez vous, moi non plus :lol:
Je te rassure c'est compréhensible......mais par toi je ne sais pas. :P :P
(Soit dit en passant, j'ai piqué une partie du code se trouvant dans la procédure Send, dans le post sur l'Anti-Spam.
Je réclame des droits d'auteur :D
Bon plus sérieusement tu as une pitite DLL sur mon site mais je vais bientôt la faire en librairie (merci tailbite) et sans API donc avec un meilleur contrôle 8) .
Pour le FTP, en fait il y a le port 21 ou tu te connectes au serveur avec un OpenNetworkConnection() qui est le canal de contrôle et il y a un autre port que tu choisis toi (je sais que tu veux pas mais... www.salemioche.com ) et sur se port tu dois créer un serveur. J'ai compris comment faire le système des 2 ports GRACE A SALEMIOCHE et aussi un peu grace au code atomic FTP server dans les sources avancées de PB. Pour ton code, 2-3 erreurs :

Code : Tout sélectionner

*Ret = Send("USER "+Login$) : AddGadgetItem(#Message,-1,PeekS(*Ret)) 
*Ret = Send("PASS "+Pass$)  : AddGadgetItem(#Message,-1,PeekS(*Ret))
Il faut rajouter un espace après les commandes avec paramètres.

Code : Tout sélectionner

*Ret = Send("SYST")  : AddGadgetItem(#Message,-1,PeekS(*Ret))
Si tu l'a vu sur salemioche, il faut utiliser la commande entre parenthèses donc ici "SYST" et non "SYSTEME"

Pour l'explication je vais en faire une demain si j'ai le temps avec un bout de code :D . Mais encore une fois www.salemioche.com et regarde bien la session commentée, une mine d'or
Fred
Site Admin
Messages : 2652
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Pour vraiment faire ca dans les règles, faut consulter les RFC relatives au FTP:

http://www.salemioche.com/ftp/ftp_rfcfr.php
Répondre