Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MK_SOCKET : UNE BIBLIOTHÈQUE COMPLÈTE ET TRÈS SIMPLE DE GESTION DE SOCKET TCP


Information sur la source

Catégorie :Réseaux & Internet Classé sous : socket, tcp, client, serveur, linux Niveau : Initié Date de création : 02/01/2006 Date de mise à jour : 23/05/2007 21:32:36 Vu / téléchargé: 8 971 / 1 559

Note :
7,8 / 10 - par 5 personnes
7,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

Description

Cette source présente une bibliothèque qui implémente une classe de gestion des sockets TCP.
Je sais bien qu'il y en a d'autre sur le site, mais je n'en ais pas vu qui soit à la fois très simple et qui permette d'écrire des clients et des serveurs. En bonus, ma bibliothèque se compile sous windows et linux.

Par contre elle est écrite en C++. C'est un choix que j'ai fait pour simplifier au maximum l'utilisation sans avoir besoin de sacrifier ses capacités parmi lesquelles la gestion des clients et des serveurs (avec un nombre non limité de clients en gestion asynchrone à l'aide de thread (ce qui n'est pas le plus performant)).
Il manque tout de même la gestion de l'UDP, car seul le protocole TCP est supporté pour l'instant.
 

Source

  • /*
  • Ci dessous je vous mets juste l'interface publique de la classe mk_socket pour que vous puissiez vous faire une idée.
  • Elle est abondamment commentée dans le code source dans l'archive.
  • */
  • class mk_socket
  • {
  • public:
  • mk_socket();
  • ~mk_socket();
  • bool Connect(const char *hostname,unsigned short port);
  • bool Listen(unsigned short port);
  • bool Close();
  • bool Send(const char* str);
  • bool Send(const char* data,int size);
  • bool Accept(mk_socket& new_sock);
  • bool WaitClose();
  • ETAT GetState();
  • void Kill();
  • void SetOnConnectCallBack(void (*onconnect)(mk_socket&,void*)=NULL,void* data=NULL);
  • void SetOnCloseCallBack(void (*onclose)(mk_socket&,void*)=NULL,void* data=NULL);
  • void SetConnectionRequestCallBack(void (*onrequest)(mk_socket&,void*)=NULL,void* data=NULL);
  • void SetDataArrivalCallBack(void (*dataarrival)(mk_socket&,char*,int,void*)=NULL,void* data=NULL);
  • };
/*
Ci dessous je vous mets juste l'interface publique de la classe mk_socket pour que vous puissiez vous faire une idée.
Elle est abondamment commentée dans le code source dans l'archive.
*/

class mk_socket
{
  public:
    mk_socket();
    ~mk_socket();

    bool Connect(const char *hostname,unsigned short port);
    bool Listen(unsigned short port);
    bool Close();
    bool Send(const char* str);
    bool Send(const char* data,int size);
    bool Accept(mk_socket& new_sock);
    bool WaitClose();
    ETAT GetState();
    void Kill();

    void SetOnConnectCallBack(void (*onconnect)(mk_socket&,void*)=NULL,void* data=NULL);
    void SetOnCloseCallBack(void (*onclose)(mk_socket&,void*)=NULL,void* data=NULL);
    void SetConnectionRequestCallBack(void (*onrequest)(mk_socket&,void*)=NULL,void* data=NULL);
    void SetDataArrivalCallBack(void (*dataarrival)(mk_socket&,char*,int,void*)=NULL,void* data=NULL);
};

Conclusion

Je n'ai pas pu beaucoup tester le fonctionnement de la bibliothèque sous linux. Normalement ça compile sans problème, et vu que ça marche sous windows il ne devrait pas y avoir de problèmes.
Il manque quelques toutes petites choses dans la gestion des erreurs, mais rien qui gène le fonctionnement normal de la bibliothèque.

Vous pouvez télécharger mes autres bibliothèques ou des mises à jour sur ce site :
http://lib.sectionpc.info/

UPDATE : j'ai débogué la bibliothèque aussi sous linux (il y avait un problème avec la création de thread, mais maintenant, c'est corrigé), d'autre part le code est plus conforme aux normes récentes du C++.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

06 janvier 2006 15:45:42 :
ajout de fichiers exemples dans le zip.
23 mai 2007 21:32:36 :
correction d'un bogue lors de la création de thread sous linux qui causait un segfault. correction du programme qui faisait que certaines fonctions n'étaient pas correctement déclarées.

Commentaires et avis

signaler à un administrateur
Commentaire de jean84 le 03/01/2006 12:31:55

=> Je sais bien qu'il y en a d'autre sur le site, mais je n'en ais pas vu qui soit à la fois très simple et qui permette d'écrire des clients et des serveurs. <=

T'as pas du bien chercher alors parce que moi j'en ai fait une qui correspond exactement a ces crtiteres... m'enfin bon ....

Pour le code, le fait de compiler sous linux et windows et sympa mais je comprend pas quand tu dis "Je n'ais pas pu beaucoup tester le fonctionnement de la bibliothèque sous linux. Normallement ça compile sans problème, et vu que ça marche sous windows il ne devrait pas y avoir de problèmes." Sa compile sans probleme vu que sa marche sous windows ??? j'avoue ne pas comrendre le sens de ta phrase....
je te met 7/10 car le source est bien commente et est ingenieux.
@++ et bonne continuation !

signaler à un administrateur
Commentaire de dnob700 le 03/01/2006 20:01:29

effectivement, j'était passé sur ta source en plus, mais je sais pas pourquoi elle m'a semblé plus compliqué, alors qu'elle fait effectivement à peu près la même chose que la mienne et tout aussi simplement (à l'exception du multithreading).

Pour ma phrase ce que je veux dire c'est que ça compile correctement sur les deux plateformes. Et la bibliothèque fonctionne correctement sous windows, donc je suppose qu'elle doit fonctionner correctement sous linux.

signaler à un administrateur
Commentaire de katsankat le 06/01/2006 06:33:22

Salut, cool la source.
Ca compile bien sous linux, en remplaçant return NULL; par return 0; à la fin de mk_socket.cpp (la fonction doit retourner un entier long non signé mais null est un pointeur).
Aurais-tu un exemple d' utilisation de la classe? J'ai du mal avec les callbacks.

signaler à un administrateur
Commentaire de dnob700 le 06/01/2006 15:47:57

j'ai rajoutté dans l'archive 3 petit progs d'exemple : un programme pour interoger le serveur whois des noms en .eu et un petit client et serveur de chat. Pour ces dernier néanmoins il faut réécrire la gestions des entrées sorties avec iostream ou équivalent pour ceux qui voudrait le compilé sous linux, ou sous windows mais sans la lib advio.

signaler à un administrateur
Commentaire de noSnoR le 06/01/2006 20:54:12

Pareil que Katsankat, un petit exemple m'aiderait assez...

signaler à un administrateur
Commentaire de noSnoR le 06/01/2006 20:58:57

Barf, désolé pour le post inutile, je n'avais pas pris le temps de lire le dernier post...

signaler à un administrateur
Commentaire de worms4 le 09/03/2006 11:35:13

Salut serait t'il possible de rajouter une petite doc du descriptif de chaque fonction de ta classe pour bien comprendre se qu'elle font

signaler à un administrateur
Commentaire de worms4 le 20/03/2007 13:33:56

J'ai débugguer la librairie pour qu'elle ne plante plus sous linux. [url=http://irrlichtfr.free.fr/libs/mk_socket.zip]ici[/url]

Et voici un exemple ou l'on trouve une version du client et du server qui compile sous nunux. [url=http://irrlicht.fr/forum/viewtopic.php?id=89#top]ici[/url]

signaler à un administrateur
Commentaire de dnob700 le 23/05/2007 21:35:30

Voila, j'ai corrigé le bogue qui causait un segfault lors de la création de thread sous linux (je suppose que c'est ce que worms4 a modifié aussi).

En prime, il devrait bientôt y avoir une nouvelle version beaucoup plus moderne et plus propre.

signaler à un administrateur
Commentaire de dnob700 le 23/05/2007 21:40:28

Voila, j'ai corrigé le bogue qui causait un segfault lors de la création de thread sous linux (je suppose que c'est ce que worms4 a modifié aussi).

En prime, il devrait bientôt y avoir une nouvelle version beaucoup plus moderne et plus propre.

signaler à un administrateur
Commentaire de aklim le 02/07/2007 17:44:06

Bonjour, merci pour ta classe, c'est tout à fait ce que je recherchais. Mais j'ai actuellement un pb de link sous VS6 qui me retourne ce message :

LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other libs; use /NODEFAULTLIB:library
mk_socket.lib(mk_socket.obj) : error LNK2001: unresolved external symbol ___security_cookie
mk_socket.lib(mk_socket.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4
socketcpp___Win32_Debug/socketcpp.exe : fatal error LNK1120: 2 unresolved externals
...

As tu idée ?


signaler à un administrateur
Commentaire de aklim le 03/07/2007 14:13:38

OK, j'ai trouvé
Celà venait du fichier .lib qui n'était pas compatible avec VS6. J'ai tout mis dans le projet et maintenant çà roule.
Merci pour la source

signaler à un administrateur
Commentaire de BumpMANN le 29/07/2007 08:24:09

J'aime bien, simple, pratique, nikel... ca me fait penser aux winsocks de vb ^^

signaler à un administrateur
Commentaire de BumpMANN le 29/07/2007 13:16:36

En revanche je trouve que y'a un gros problème.... a plein de fonctions ça crée des threads, okay, mais ca les quitte jamais. si on fait un serveur avec ça, ça va vite exploser...

signaler à un administrateur
Commentaire de BumpMANN le 29/07/2007 13:23:19

Ah non désolé, c'est moi qui ai jamais utilisé les threads et qui sait pas lire une fenêtre de sortie -__-; Ils se terminent bien au fur et a mesure, désolé, c'est donc vraiment nikel.

signaler à un administrateur
Commentaire de dnob700 le 29/07/2007 13:24:26

C'est très exactement inspiré du winsock de VB qui m'a manqué lorsque je suis passé au C.

En réalité, un seul thread est créé pour chaque socket mais pas plus. C'est peut-être déjà trop dans le cas d'un gros serveur, mais pour la plupart des petites applications ce n'est pas du tout un problème.

signaler à un administrateur
Commentaire de metos le 05/11/2007 15:50:25

Salut,

  quand je compile sous debian avec GCC l'exemple du client, j'ai les erreur suivante de compilation :
./advio.h:359: error: expected `)' before '&' token
./advio.h:359: error: expected ',' or '...' before '&' token
./advio.h:359: error: 'SetHandler' declared as function returning a function
./advio.h:359: error: expected ';' before ')' token
./advio.h:383: error: ISO C++ forbids declaration of 'FILE' with no type
./advio.h:383: error: expected ';' before '*' token


as-tu une idée pourquoi?
merci d'avance

signaler à un administrateur
Commentaire de dnob700 le 05/11/2007 19:51:32

Advio ne peut pas compiler sous linux malheureusement.
A cette époque j'aimais bien réinventer la roue. Mais tu peut remplacer advio.h par <iostream> et mettre des objet cin et cout là où il faut (il n'y a pas beaucoup de chose à changer), et ça devrait fonctionner.

Je mettrais à jour les exemples si j'y pense.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

programmation socket sous linux [ par blazman34 ] Bonjour à tous !!Voici mon probleme :Je suis en train de programmer une application client serveur sous linux, tout a bien marcher juska présent juska problème serveur TCP en C [ par lenneth666 ] Bonjour j'ai essay&#233; de faire un client server TCP en C mais mon serveur bloque a l'instruction suivante : client_socket = accept( ma_socket,(s Soket sous LINUX [ par diablo31170 ] Bonjour &#224; tous le monde, comme le nom l'indique, cela va parler de soscket sous linux (en C++). Il aut savoir que je travaille en mode connect&#2 socket client (php) vers serveur (c++) [ par suleyman ] bonjour, je suis debutant, je nai jamais programmer une socket et jaimerai avoir le code source ainsi que les commentaires dune socket client et serve Identifier un Client via Socket IP - C++ [ par Jeff_Trek ] Bonjour,J'utilise un Serveur (Socket IP), J'aimerais identifier les clients qui se connecte et déconnecte.Je connais les adresses IP des clients.Si Cl Socket et linux : serveur smtp [ par LuckyNut ] Bonjour,J'ai développé un petit serveur smtp sous linux et j'ai un pb que je n'arrive pas à résoudre.Il marche nickel si je le fais écouter sur le por Client/Serveur Socket [ par ProgVal ] Comment utilise-t-on les Client Socket et les Serveurs Socket ShowMessage ("signé ProgVal") transfert d'imge d'un serveur vers un client en C++(linux) [ par doberman7578 ] bonjour,n'aarivant pas a effectuer le transfert d'une image d'un serveur a un client en c++ , quelqu'un pouurait il maider a effectuer celamercia++ Etat Socket Linux [ par cybermax62 ] Existe-t-il un moyen de conna&#238;tre sur un server (socket,C) l'&#233;tat d'un connection client (socket,C) utilisant le protocole SOCK_STREAM ? Act client windows , serveur linux mysql [ par Guilhou ] Bonjour &#224; tous, j'aurais voulu savoir s'il &#233;tait possible de faire communiquer une serveur linux avec des clients qui tournent sous windows.


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.