simtiers
Messages postés207Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 2 novembre 2006
-
31 déc. 2004 à 18:25
simtiers
Messages postés207Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 2 novembre 2006
-
25 janv. 2005 à 20:21
Salut tout le monde ! J'ai pour projet de faire un serveur FTP pour un réseau local, afin d'éviter de passer par l'explorateur Windows, et pour enrichir mes compétences de prgrammation.
J'aimerais savoir si je dois utiliser les sockets "pures" ou les Winsocks (serveur sous Windows), et comment gérer les connexions multiples. C'est ce dernier point que je trouve très important. J'aimerais aussi savoir comment effectuer le transfert de fichiers : tout d'un bloc, ou morceaux par morceaux ?
Pour ce qui est des references pour le protocole FTP, j'ai déjà : les RFC et le site www.salemioche.com
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 31 déc. 2004 à 20:34
Euh, perso, j'opterais pour une connexion client/server standard, genre en connection-less (UDP) puisqu'il s'agit d'un résau local...jme suis aussi posé la question du transfert de fichier pour un autre style d'appli ^^....et ne connaissant pas un protocole ou une fonction qui fait tout le boulot, j'ai pensé à faire tout simplement des envois successifs de données, donc d'envoyer le fichier par paquets de données (morceaux)...genre tu connectes à ton server, tu lui envoie une commande qui spécifie que tu veux télécharger ou uploader tel ou tel fichier et apres tu te retrouve avec une fonction du type :
Tu vois, un truc dans ce genre la...:-) si tu as des questions, je ne suis pas un expert, bien au contraire, mais je me ferai une joie de t'aider si je le peut, donc n'hésite pas à m'envoyer des messages en privé :)
Bonne soirée, et pour ceux qui aiment la nouvelle année, Joyeuse année 2005....
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 1 janv. 2005 à 16:06
Au stadard, FTP se base sur TCP. Pour faire plus léger, il existe TFTP qui se base sur UDP. Si tu veux utiliser un client (genre freeware, shareware, etc...) il te faut un serveur codé selon le standard. D'ailleurs, TCP te simplifie bcp la vie car tu n'as pas besoin de gérer le fragmentation de ton fichier.... j'avais comme projet perso de coder un serveur ftp. Projet laissé en suspens. Si tu as besoin d'un coup de main !
simtiers
Messages postés207Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 2 novembre 2006 1 janv. 2005 à 17:11
Merci les gars : sachez que toute aide est la bienvenue, car la programmation, c'est avant tout un esprit d'entre-aide.
J'ai justement besoin d'un conseil : comment faire pour pouvoir gérer plusieurs connexions en même temps, sachant que j'aurais une vingtaine de connexions simultanées possibles.
J'avais pensé faire un classe pour le dialogue avec un client, et créer un thread par client, mais je sais pas si ça irait, ni comment l'implanter réellement.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 1 janv. 2005 à 22:53
TCP garantit le bon acheminement des données quelque soit leur taille. Si un fragment est perdu durant l'émission de ton fichier, TCP assure la réémission. Si les fragments sont déséquencés, TCP assure le réordonnancement à la réception. Etc...
UDP n'assure pas ces services, par définition.
Si tu utilises UDP, c'est à toi de mettre en oeuvre les mécanismes qui vont garantir le bon acheminement des données à travers le réseau. Dans un LAN les risques sont faibles, mais via Internet ou tout autre WAN, c'est indispensables.
Par contre, si tu utilises TCP, tu n'as rien d'autre à faire qu'un vieux send(). Tu pourras donc te concentrer sur l'implémentation du protocole FTP et oublier les problèmes réseaux.
simtiers
Messages postés207Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 2 novembre 2006 2 janv. 2005 à 12:45
Effectivement, d'après ta description, le TCP semble être le plus simple à utiliser dans ce genre de transmissions.
Cela dit, est-ce que je peux enoyer un fichier de 600 Mo (image d'un disque), en un seul bloc.
Je pense que le partager en morceaux de 1 Mo serait plus intelligent (au niveau de la mémoire du serveur), mais je ne sais pas quelle serait la taille optimale pour transmettre un fichier.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 2 janv. 2005 à 23:45
Un coup de getsockopt avec l'option SO_SNDBUF te permet de connaitre la taille maximale du buffer d'émission. Cela fixe la taille des fragments de tes gros fichiers au moment de l'appel de send().
simtiers
Messages postés207Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 2 novembre 2006 8 janv. 2005 à 11:42
Merci pour votre aide, les gars!
Encore quelques questions :
1°/ quel type de chaines de caractères dois-je utiliser : ANSI : char*, UNICODE : wchar_t* ou GENERIQUE : TCHAR* ?
2°/ lors du dialogue avec le client, dois-je créer une fonction par
commande du protocole FTP, avec une fonction principale de dialogue,
appelant les autres en temps voulu, ou bien tout faire dans la même
fonction ?
simtiers
Messages postés207Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention 2 novembre 2006 25 janv. 2005 à 20:21
Pour l'instant, je gère juste les commandes USER, PASS et QUIT.
Avant de chercher à implanter d'autres commandes, j'aimerais savoir
exactement ce que font les commandes TYPE, MODE et STRU au niveau
serveur (pour une implantation minimum).
De plus, je teste pour l'instant mon serveur avec le programme
console FTP de Windows : existe-t-il d'autres utilitaires consoles et
gratuits pour des dialogues vraiment personnalisés avec un serveur FTP
(pour pouvoir envoyer des commandes de debuguage personnalisées)