begin process at 2008 07 06 13:03:29
1 205 545 membres
122 nouveaux aujourd'hui
14 119 membres club

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é: 7 243 / 1 414

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++.
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

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.
  • 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

Pub



Appels d'offres

Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€
creation de marque et ...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS