Mk_socket : une bibliothèque complète et très simple de gestion de socket tcp

Soyez le premier à donner votre avis sur cette source.

Vue 14 718 fois - Téléchargée 2 326 fois

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 / Exemple :


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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
44
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
5 novembre 2007

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 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.
Messages postés
168
Date d'inscription
vendredi 18 janvier 2002
Statut
Membre
Dernière intervention
19 octobre 2009

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
Messages postés
44
Date d'inscription
mardi 17 février 2004
Statut
Membre
Dernière intervention
5 novembre 2007

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.
Messages postés
331
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
26 janvier 2009

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.
Messages postés
331
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
26 janvier 2009

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...
Afficher les 18 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.