MINI CHAT CLIENT-SERVEUR (UDP) AVEC TRANSFERT DE FCIHIER (TCP)

cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014 - 1 mai 2007 à 21:53
albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008 - 9 mai 2007 à 23:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42535-mini-chat-client-serveur-udp-avec-transfert-de-fcihier-tcp

albert0 Messages postés 249 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 9 août 2008
9 mai 2007 à 23:03
UDP -> protocole non sécurisé, parfait pour du video stream, ou voix sur ip (car inutile de Renvoyer un paquet)

TCP -> protocoles sécurisé, pour des applis (comme un chat...) où il est préferable de renvoyer si il n'est pas arriver à destination

Comme j'ai lue plus haut, (j'ai pas regardé le code), la taille maximum d'un paquet (ethernet) est de 1500 octets (un paquet Ip 65536 octets). Et donc si un de tes paquets est > 1500, il sera fragementé. les paquets contiennent deja des bits pour dire si c'est le dernier paquets ou pas.
CAVAVIN128 Messages postés 4 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 28 mai 2008
7 mai 2007 à 13:42
je voudrais avoir des critiques ainsi que des pistes d'ameliorations!!
avis au programmeur
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
3 mai 2007 à 09:15
Pendant que j'y repense UDP c'Est pas la meilleure politique car tu n'as aucune garantie que ton packet arrivera à destination ni que si tu en envoie plusieurs ils arriveront dans l'ordre à moins de créer un protocole de communication compliqué, ce qui reviendrais en définitive a faire du TCP.

En faîte l'avantage de UDP c'est qu'on peut faire du broadcasting lorsque l'on est en LAN, ce qui permet par exemple de transférer un fichier a 20 ordinateurs sans envoyer 20 fois le même fichier à chacune des personnes.
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
3 mai 2007 à 09:09
Ue structure c'est possible mais je ne te le conseil pas car tu devra envoyer des packets à tailles fixes. Place plutot simplement le caractère changement de ligne comme fin et sa devrait bien aller pour le traitement. http://www.cppfrance.com/codes/SERVEUR-MULTITHREAD-SOUS-LINUX-WINDOWS-MYSQL-VCPLUSPLUS-DEVCPLUSPLUS_40044.aspx

Dans mon code il y a une fonction assez simple a comprendre qui s'occupe de faire ça. Aussi concernant les structures tu risques d'avoir des problèmes avec les machines qui traitent en big endian/little endian (la dessus je dis peut-être une connerie, si quelqu'un veut confirmer/infirmer).
CAVAVIN128 Messages postés 4 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 28 mai 2008
2 mai 2007 à 08:48
Je sais pas si tu as regarde mon programme mais je passe mon message sous forme d'une structure.Penses tu que je dois revoir totalement mon appli? Pour detecter la fin dans une structure ca va etre cho?Pour le transfert ce que tu dis est vraiment pas bete.
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
2 mai 2007 à 08:39
Non tu te complique pas la vie, tu met un caractère à la fin du packet qui indique la fin du message, ensuite tu créer un buffer de l'autre côté qui accumule les données entrantes et les traitent au fur et à mesure. Si jamais une donnée est incomplète il ne fera rien, il la laisse dans le buffer et attend. Une fois la donné complèté (détecter le caractère de fin de trame) il la traite et l'enlève du buffer et continu ainsi de suite ... sans fin.
CAVAVIN128 Messages postés 4 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 28 mai 2008
1 mai 2007 à 22:08
C'est pas qu'il ne fonctionne pas du tout en LAN il marche nickel. Si le paquet arrive en plusieurs la solution ne serait elle pas de tester la taille que l'on rençoit afin d'aviser et de continuer la recption j'usqua avoir la totalite du paquet?
Avis au pro
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
1 mai 2007 à 21:53
Si sa ne fonctionne pas c'est pas vraiment la peine de le déposer :S Mais n'oublie pas que si tu envoie un packet il peut très bien recevoir en deux packets de l'autre côté surtout si tu n'est pas en LAN. Je te dis ça car c'est dans 90% des cas la cause du problème, ce que beaucoup ne savent pas.
Rejoignez-nous