BIBLIOTHÈQUE PERMETTANT D'UTILISER LES SOCKETS DE MANIÈRE TRANSPARENTE QU'ELLES

anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006 - 24 avril 2006 à 22:34
wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007 - 18 juil. 2007 à 09:24
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/37214-bibliotheque-permettant-d-utiliser-les-sockets-de-maniere-transparente-qu-elles-soient-windows-unix-et-tcp-udp

wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007
18 juil. 2007 à 09:24
merci je vais voir ça !
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
16 juil. 2007 à 11:42
Voila la nouvelle mouture :
http://www.cppfrance.com/code.aspx?ID=43473
wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007
11 juil. 2007 à 09:45
toujours pas de nouvelles ?
wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007
3 juil. 2007 à 16:38
Salut !

je te relance, au risque d'être un peu lourd, pour savoir où tu en étais de tes modifications ? Parce que j'ai adapté celui que j'ai récupéré à mon utilisation, mais disons que c'est pas très propre et pas très C++ :D
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
19 juin 2007 à 10:01
oui
wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007
19 juin 2007 à 08:35
Autre petite question, est ce que la nouvelle version sur laquelle tu bosses prend en charge les sockets côté serveur. je pense notamment aux fonctions bind et listen parce que ça n'est pas le cas sur celle-ci et je m'arrache un peu les cheveux pour l'aspect transparent unix/windows vu que je ne connais pas le fonctionnement sous windows !
wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007
15 juin 2007 à 18:26
ok, parfait, j'ai hate quelle sorte, je vais commencer à m'en servir dans le cadre de mon stage pour de la communication telnet avec un lecteur RFID :d
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
15 juin 2007 à 18:16
Si si bien sur, la nouvelle version le fait !
Cette version est une biblio que j'avais dans le cadre d'un TP, il y'a de cela bien longtemps maintenant (j'en était à mes début de prog :D). La future version est de tout bien de vue bien meilleure.
wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007
15 juin 2007 à 18:02
ok, cool, merci bien !

juste une question, j'ai vu que tu gérais le recv() en caractère par caractère ? Mes connaissances en C++ sont toutes neuves, mais n'y a-t-il pas possibilité de gérer ça avec un string pour qu'il reçoivent un message complet directement ?
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
15 juin 2007 à 17:32
oui, je suis en train de corriger les derniers bugs. Je vais essayer de la poster avant la fin du mois.
wadcyr8_197 Messages postés 23 Date d'inscription vendredi 24 novembre 2000 Statut Membre Dernière intervention 2 septembre 2007
15 juin 2007 à 16:13
salut,

merci pour cette petite bibliothèque qui me simplifie bien la vie.

par contre j'ai lu que tu l'avais refaite en C++ pur et que tu devais la poster. Malheureusement je n'arrive pas à mettre la main dessus, l'as tu fait finalement ?

merci
Wad
lepiratox Messages postés 7 Date d'inscription samedi 24 février 2007 Statut Membre Dernière intervention 25 mars 2014
24 févr. 2007 à 21:57
merciiii
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
8 oct. 2006 à 20:28
Oui, en effet, cette source n'est pas de toute première jeunesse. J'ai tout refait en C++ de manière bien plus otimisé.
Je la posterai bientot.
cs_crunch117 Messages postés 7 Date d'inscription dimanche 22 mai 2005 Statut Membre Dernière intervention 16 juillet 2007
7 oct. 2006 à 11:40
Les + :

- Commentaires présent, ce qui est énorme ;)

je trouve cette source très basique et mal conçue pour plusieurs raisons :

Les - :

- c'est un joyeux mélange de C et de C++ avec des char * et std::string dans tous les sens
- aucune encapsulation véritable des fonctions de communication, qui risquent plus de compliquer les librairies socket plutot que de les simplifiées
- il y a quelque chose (qui n'est pas très grave mais qui est souvent récurrent), c'est aussi un mixage de deux langages : français / anglais. Par exemple on a à plusieurs endroits des variables "temp" et plus loin "erreur" puis ensuite "tmp", "ret" puis "retour", autant dire que si tu veux présenter ta source à un étranger, il va perdre un temps fou à apprendre l'anglais s'il ne connait pas et ensuite le français, qui est bien plus compliqueé en comparaison des langages de programmation.
- WSAGetLastError() n'est, je crois non portable.
- La gestion d'erreurs est désastreuse : joyeux mélange de throw (int), avec aucune spécification , avec des codes de retours de fonctions non définies en constantes entre les fonctions et ses utilisateurs mais c'est parceque tu n'as pas fait de choix clairs.
- "using namespace" est en effet assez dangereux, utilise des alias (using std::(object,class)), l'espace de nom global, surtout en C++, ne doit pas être polluer à cause de fichiers en-têtes

Si tu veux améliorer ta source, et son but, tu devrais (toujours selon moi) :

- Choisir entre C et C++, programmation structurale et programmation objet.
- Choisir le langage dans lequel tu veux présenter tes sources et AUSSI les commentaires
- Réaliser un minimum de conception
- Utiliser un maximum des constantes
- Encapsuler les fonctions dans une classe avec une interface protégée
- Définir l'interface de chaque fonction

Je ne m'adresse pas seulement à toi mais à tous les débutants en C/C++ car ils n'ont pas choisi des langages de trop haut niveau, et que si ils veulent faire quelque chose de propre, ils devraient prendre de bonnes habitudes.

Si des gens ont d'autres suggestions...
dPompei2 Messages postés 55 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 1 septembre 2006
29 avril 2006 à 13:44
c'est pas mal, mais tu disais que tu l'a faite par "besoin", alors juste une question: pourquoi t'avait pas utilisé la SDL_net ?
sinon, elle a l'air bien ta lib ;)
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
26 avril 2006 à 18:37
Oui en effet, j'utilise les string plutot que des char* pour plus de facilité, quant aux cout et cerr on peut aisément les remplacer par des printf(...) et fprintf(stderr, ...). Par contre les exceptions ne pourrons plus être utilisées.
Je travaille actuellement sur une version purement C++ orientée objets (du C++ quoi ;D), qui sera je pense, très puissante et simple à utiliser avec la possibilité de rajouter des protocoles autres que TCP et UDP facilement.
Je la posterai quand je l'aurai terminé.

w&s
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
26 avril 2006 à 17:52
"using namespace std;"

oui mais est ce vraiment obligatoire ?

je vois que le code peut etre aisement convertit en C ainsi il

sera utilisé en C/C++ .
cs_krust Messages postés 140 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 19 novembre 2006
25 avril 2006 à 15:41
Ok, je vois ce que tu veux dire par transparent maintenant. C'est juste pour éviter un reverse engineering trop aisé.
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
25 avril 2006 à 14:45
| vire l'usage des #define TCP et UDP, puisque, j'imagine, on peut avoir besoin des deux à la
| fois ds un programme, non? c'est dommage de se limiter si ta lib gère les deux :)
| --> Oui pourquoi pas, je vais voir ca !
----> C'est fait.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 avril 2006 à 11:58
Que de dynamisme, ça fait plaisir :D J'attends la suite ^_^.
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
25 avril 2006 à 11:52
|pourquoi tu le classifie parmi des codes C++ et non pas C
--> Voir reponse de Kirua ;D


| using namespace std;
| qui d'ailleurs ne devrait jamais apparaître dans un en-tête (.h , .hpp, .hh)
| c'est assez important, puisque ts les programmes qui inclueront ta lib verront le namespace std
| automatiquement (et pas forcément consciemment) mis dans le namespace global (façon de parler).
--> En effet, merci c'est corrigé.

| ce serait bien que tu fasses une version encapsulée (classes)
--> J'y travaille

| vire l'usage des #define TCP et UDP, puisque, j'imagine, on peut avoir besoin des deux à la
| fois ds un programme, non? c'est dommage de se limiter si ta lib gère les deux :)
--> Oui pourquoi pas, je vais voir ca !
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 avril 2006 à 11:33
à cause de ceci:

using namespace std;

qui d'ailleurs ne devrait jamais apparaître dans un en-tête (.h , .hpp, .hh)

c'est assez important, puisque ts les programmes qui inclueront ta lib verront le namespace std automatiquement (et pas forcément consciemment) mis dans le namespace global (façon de parler).

sinon, vrmnt intéressant d'avoir codé ça, ce serait bien que tu fasses une version encapsulée (classes) et que tu vire l'usage des #define TCP et UDP, puisque, j'imagine, on peut avoir besoin des deux à la fois ds un programme, non? c'est dommage de se limiter si ta lib gère les deux :)
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
24 avril 2006 à 22:34
ça a l'air d'etre pas mal cepandant pourquoi tu le

classifie parmi des codes C++ et non pas C .