begin process at 2012 02 10 11:20:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :12 009 / 1 733

Auteur : dnob700

Ecrire un message privé
Site perso
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

Les Membres Club peuvent 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.

 Sources de la même categorie

Source avec Zip SERVEUR MULTITHREAD [LINUX/WIN] par nipepsinicolas
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture SUIVI DE PRODUCTION ONDULEUR PHOTOVOLTAÏQUE SOLARMAX par brunovan
Source avec Zip MINICHAT MULTI-CLIENT par wisar
SOCKET CPP par baptchr55

 Sources en rapport avec celle ci

Source avec Zip MINICHAT MULTI-CLIENT par wisar
Source avec Zip Source avec une capture CLIENT/SERVEUR UTILISANT LES IOCP RÉALISÉ AVEC BORLAND BUILD... par goodboy21
Source avec Zip SERVEUR/CLIENT LINUX par ghost4
Source avec Zip Source avec une capture KEYLOGGER SERVEUR/CLIENT par yann2192
Source avec Zip MINI CHAT C/C++ par edf102

Commentaires et avis

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 !

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.

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.

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.

Commentaire de noSnoR le 06/01/2006 20:54:12

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

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

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

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]

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.

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.

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 ?


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

Commentaire de BumpMANN le 29/07/2007 08:24:09

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

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

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.

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.

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

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,288 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales