Connexion et récupération de fichier via ftp en C [C] - C - Programmation
Marsh Posté le 21-07-2009 à 18:47:02
Whaaa, je vais jamais pouvoir t'aider, mais ça a l'air trippant de bosser là-dessus
Les entrées/sorties se font comment avec ta carte, c'est surtout ça que je pige pas ? Comment lui passes-tu ne serait-ce qu'une ligne de commande ? Ensuite, est-ce que l'interaction entre les deux machines est déjà programmée en C (ou autre chose mais a priori, tout doit être fait en C) ? Et si oui, comment ? Et ces interactions se font uniquement par le biais d'un câble ethernet ?
Le serveur FTP de ta carte, tu es censé lui passer des lignes de commandes seulement ? Je pense (j'espère pour toi surtout) qu'il doit y avoir un moyen de communiquer avec ce serveur FTP en C, sinon faudrait carrément en programmer un sur ta machine B (à moins que tu puisses aussi lancer des prog C depuis ta machine A ?).
Sorti de l'informatique, et dès que ça commence à toucher à l'électronique, j'ai du mal (comment fonctionne un ordinateur ? Mais par magie bien sûr ! )
Ça dépasse largement mes connaissances, mais j'ai hâte que quelques pointures ici viennent y mettre leur nez pour en apprendre un peu plus.
Marsh Posté le 21-07-2009 à 18:47:02
Bah, si tu n'as pas envie de te farcir la RFC du protocole FTP, tu peux aller voir le code source de wget (qui n'est pas non plus super trivial à lire). Sinon tu as la libcurl (http://curl.haxx.se).
Marsh Posté le 21-07-2009 à 18:48:00
Haha, j'ai gagné ! (il manque les millisecondes quand même )
Marsh Posté le 21-07-2009 à 19:56:54
Déjà merci pour votre intérêt!!
@Turkleton :
Je te cache pas que c'est bien sympa comme boulot, mais je suis comme toi, informaticien avant tout, j'ai un peu de mal avec l'électronique de pointe mais là ça va, je gère l'ignoble fer à souder et les plaques de test ^^.
La carte fox board est configuré via le port ethernet, soit par telnet pour tout ce qui est configuration du linux embarqué (et donc tout ce qui est ligne de commande), et par ftp pour envoyer des programmes et fichiers dessus. Après le système A possèdent une interface simplifié avec un module LCD et 2 boutons relié à la carte via I²C pour le LCD et les I/O standard de la carte pour le reste. Sur la carte j'ai aussi un récepteur GPS branché par USB et un µC relié par série pour tout ce qui est conversion Analogique->Num des capteurs etc... Enfin, c'est info ne sont pas utile au problème mais ça situe mieux le principe.
Donc mon système A est autonome en quelques sortes dans son fonctionnement primaire. A la mise sous tension, mon linux lance le programme qui gère tout, et l'utilisateur gére le relevé de terrain avec son interface LCD/bouton. Après le relevé de terrain, le système A est relié à B pour que B récupère les résultats de mesure.
Le système B n'a aucune interface proprement dit. Toutes ses fonctionnalité son activé à l'aide d'un client léger (ici une page web que l'on charge à partir d'un pc standard). L'utilisateur n'a qu'a appuyer sur un bouton pour que B récupère les donnée et fasse les traitements appropriés.
Tout doit être fait en C car les performances matériels son limités d'une part, que c'est plus ou moins du temps réel, et surtout que tout l'existant est en C... (et puis j'aime le C ^^)
Je pensais utilisé la serveur ftp déjà présent sur la carte A, cela me semblait plus simple à première vue que de refaire tout un protocole de com. Surtout que je suis pas très calé en programmation réseau...
J'avais dans un premier temps voulu faire une grosse magouille, ou un script lancé avec un petit system("mom_script" ). Mais je cherche quelques chose d'un peu plus propre...
@tpierron :
Je ne connaissais pas wget, je vais y jeter un oeil. Mais j'ai vu d'autre source dans le même genre. La grosse difficulté reste de dépatouiller ce qui gère effectivement les connexion ftp dans le prog de tout ce qui gère l'interface en ligne de commande. Je regarde ça plus en détail dès demain matin. Je vais pas bosser à la maison sinon y en a une qui a faire voler l'ordi...
Mais je sens que libcurl va devenir mon ami!
Merci pour vos réponses.
Je reste ouvert à toute proposition en tout cas!
Marsh Posté le 21-07-2009 à 21:01:12
Mouais, je te conseille vivement la libcurl, si comprendre le code source de wget te prends plus que cinq minutes.
Marsh Posté le 22-07-2009 à 11:28:49
des sockets avec le protocole FTP me semble assez simple...
http://www.tcpipguide.com/free/t_F [...] oups-2.htm
Marsh Posté le 21-07-2009 à 17:31:47
Bonjour à tous!
Je me tourne vers vous car j'ai un problème tout con (enfin j'espère)
Voici la scène : je travail sur un projet un peu spécial pour de la robotique. J'ai une machine qui fait du relevé de terrain, qu'on va appelé A, cette machine fonctionne avec un linux allégé mis sur une carte Fox Board. Les programmes sur cette carte ne sont pas un problème, ils créent plusieurs fichiers qui seront stocké dans le robot. Le but est de récupérer les fichiers en question en se connectant au port éthernet de la carte.
La carte a un serveur ftp intégré fonctionnel, pas de soucis.
J'aurai donc besoin de faire un programme en C qui tournera lui aussi sous linux, sur une machine un peu spéciale qu'on va appeler B (qui utilise un noyau linux temps réel allégé).
L'idée est de pouvoir branché simplement A à B avec un câble ethernet, la machine B disposant d'une interface avec l'utilisateur devra se connecter à A pour copier les fichiers en local.
En gros, c'est juste une connexion ftp avec copie de fichiers. Seulement, je ne sais absolument pas comment on code en c l'équivalent de ce que je pourrais faire facilement en ligne de commande. Or la contrainte est que le programme doit tout faire à partir du C.
J'ai cherché un peu et j'ai surtout trouvé des info pour faire un prog client serveur ftp, des genre de filezilla fait maison. Or généralement la partie connexion ftp est noyer dans l'interface, ou pire, c'est codé pour window...
J'ai cru comprendre qu'on pouvait utiliser des socket, bien que je ne connaisse pas trop. J'ai pour A une adresse IP fixe, et je n'ai pas sur B de gestion de nom de domaine.
Ce que je voudrais, c'est juste pouvoir me connecté à l'ip XX.XX.XX.XX avec le login x, puis récupérer les fichier a, b, c et d contenu dans le rep z... en C...
En espérant être assez claire...
Si quelqu'un a au moins une piste à me donner, merci!