begin process at 2010 02 10 15:16:35
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseaux & Internet

 > LIBCONNECT - BIBLIOTHÈQUE C++ DE CONNEXION

LIBCONNECT - BIBLIOTHÈQUE C++ DE CONNEXION


 Information sur la source

Note :
7,33 / 10 - par 3 personnes
7,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Réseaux & Internet Classé sous :socket, tcp, udp, broadcast, connexion Niveau :Initié Date de création :16/07/2007 Date de mise à jour :19/07/2007 10:52:20 Vu / téléchargé :7 569 / 507

Auteur : turnerom

Ecrire un message privé
Site perso
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

Le but de cette bibliothèque est de proposer une interface très facile d'utilisation à la manipulation des sockets.
libconnect est:

    * une bibliothèque de connexion de très haut niveau
    * indépendant de l'OS --> fonctionne/testé sous Linux/MacOS/Windows XP (SP2) et probablement sur toutes les plateformes UNIX
    * très modulaire (de nouveau protocoles peuvent être ajoutés très simplement)

Pour le moment cette bibliothèque implémente les protocoles TCP et UDP et supporte également le BROADCAST UDP.

------------------

Lors de la compilation, 2 fichiers sont générés, un pour la partie serveur (libconnectS.x) et un pour la partie client (libconnectC.x).

Voir doc/html/index.html pour la doc détaillée de la bibliothèque.

Source

  • Voici un exemple de main coté serveur (coté client + ou - identique) :
  • #include <connection.hpp>
  • #include <tcp.hpp>
  • #include <udp.hpp>
  • #include <iostream>
  • #include <archi.hpp>
  • using namespace std;
  • using namespace connection;
  • // struct/class fait main pour montrer qu'on peut envoyer/recevoir ce que l'on veut
  • struct Foo : public Transmissible
  • {
  • public :
  • float a;
  • float b;
  • float c;
  • Foo(){}
  • ~Foo(){}
  • virtual void send(const Connection & ct) const
  • {
  • ct.send(a);
  • ct.send(b);
  • ct.send(c);
  • }
  • virtual void receive(Connection & ct)
  • {
  • ct.receive(a);
  • ct.receive(b);
  • ct.receive(c);
  • }
  • };
  • int main()
  • {
  • // Connexion UDP BROADCAST sur le port 24558
  • Connection *c = new Connection("", 24558, new UDP, BROADCAST);
  • int a = 123;
  • float b = 4.56;
  • char d = 'c';
  • string s = "hello";
  • int i[3];
  • i[0] = 12;
  • i[1] = 53;
  • i[2] = 89;
  • Foo f;
  • f.a = 11.1;
  • f.b = 22.2;
  • f.c = 33.3;
  • tempo(1000);
  • cout << "ENVOI de : " << a << endl;
  • *c << a;
  • cout << "ENVOI de : " << b << endl;
  • *c << b;
  • cout << "ENVOI de : " << d << endl;
  • *c << d;
  • cout << "ENVOI de : " << s << endl;
  • *c << s;
  • cout << "ENVOI de : (array) " << s << endl;
  • *c << array<char>(&(s)[0], s.size());;
  • cout << "ENVOI de : " << "i[3]" << endl;
  • *c << i;
  • cout << "ENVOI de Foo : " << f.a << " " << f.b << " " << f.c << endl;
  • *c << f;
  • tempo(1000);
  • while (!c->listen())
  • cout << "DATA RECEIVED" << endl;
  • int z;
  • *c >> z;
  • cout << z << endl;
  • delete c;
  • return 0;
  • }
Voici un exemple de main coté serveur (coté client + ou - identique) :

#include <connection.hpp>
#include <tcp.hpp>
#include <udp.hpp>
#include <iostream>
#include <archi.hpp>

using namespace std;
using namespace connection;

// struct/class fait main pour montrer qu'on peut envoyer/recevoir ce que l'on veut
struct Foo : public Transmissible
{
  public :
  float a;
  float b;
  float c;

  Foo(){}
  ~Foo(){}

  virtual void send(const Connection & ct) const
  {
      ct.send(a);
      ct.send(b);
      ct.send(c);
  }

  virtual void receive(Connection & ct)
  {
    ct.receive(a);
    ct.receive(b);
    ct.receive(c);
  }

};


int main()
{
        // Connexion UDP BROADCAST sur le port 24558
        Connection *c = new Connection("", 24558, new UDP, BROADCAST);
        int    a = 123;
        float  b = 4.56;
        char   d = 'c';
        string s = "hello";

	int i[3];
	i[0] = 12;
	i[1] = 53;
	i[2] = 89;

	Foo f;
        f.a = 11.1;
        f.b = 22.2;
        f.c = 33.3;

        tempo(1000);
        cout << "ENVOI de : " << a <<  endl;
        *c << a;

        cout << "ENVOI de : " << b <<  endl;
        *c << b;

        cout << "ENVOI de : " << d <<  endl;
        *c << d;

        cout << "ENVOI de : " << s <<  endl;
        *c << s;

        cout << "ENVOI de : (array) " << s  <<  endl;
        *c << array<char>(&(s)[0], s.size());;

        cout << "ENVOI de : " << "i[3]"  <<  endl;
        *c << i;

	cout << "ENVOI de Foo : " << f.a << " " << f.b << " " << f.c << endl;
	*c << f;


        tempo(1000);

        while (!c->listen())
        cout << "DATA RECEIVED" <<  endl;
        int z;
        *c >> z;
        cout <<  z <<  endl;

        delete c;

  return 0;
}


 Conclusion

BUGS:
- Sous visual (uniquement), la bibliothèque ne compile pas si j'utilise <winsock2.h> , il faut que je mette <winsock.h>, si quelqu'un sait pourquoi ? [corrigé]


TODO :
- Ajout d'un en-tête unique (un seul .hpp à inclure)
- Le support du multicast (j'ai le code en rayon, il faut juste que je l'adapte)
- Le support des raw sockets (si quelqu'un a un code clair je suis preneur)
- Le support de l'ipv6 (à l'occasion)

 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

17 juillet 2007 14:55:41 :
ADD : detection des compilos FIX : warnings vc8 MAJ : fichiers projet vc8 MAJ : doc
19 juillet 2007 10:52:24 :
Ajouts de projets Code::Blocks (dans makefiles/win32) pour compiler 2 executables (client/serveur)

 Sources du même auteur

Source avec Zip FAST BASE64 / UUENCODING ENCODAGE/DECODAGE
CONVERTIR UNE STRING EN N'IMPORTE QUOI
UNE LISTE DOUBLEMENT CHAINEE, CIRCULAIRE ET TEMPLATES
Source avec Zip UN JUKEBOX POUR LINUX
Source avec Zip BIBLIOTHÈQUE PERMETTANT D'UTILISER LES SOCKETS DE MANIÈRE TR...

 Sources de la même categorie

Source avec Zip TIM_RESEAU, CLASSES POUR RESEAU COMPLET par williamallas
Source avec Zip INTERNET IP FINDER TROUVER VOS ADRESSE IP (INTERNET) par xmustapha
Source avec Zip CLIENT/SERVEUR AVEC TSOCKETSERVER & TCLIENTSOCKET par xmustapha
Source avec Zip REMOTE SHELL GEN par ganjarasta
PROXY IRC SIMPLE (WINDOWS/WINSOCK) par _michel

 Sources en rapport avec celle ci

Source avec Zip MINI CHAT CLIENT-SERVEUR (UDP) AVEC TRANSFERT DE FCIHIER (TC... par CAVAVIN128
Source avec Zip SQUELETTE DE COMMUNICATION PAR SOCKET EN MODE CONNECTÉ POUR ... par AlexN
Source avec Zip BIBLIOTHÈQUE PERMETTANT D'UTILISER LES SOCKETS DE MANIÈRE TR... par turnerom
Source avec Zip MK_SOCKET : UNE BIBLIOTHÈQUE COMPLÈTE ET TRÈS SIMPLE DE GEST... par dnob700
Source avec Zip FAIRE PASSER LE PARTAGE DE CONNEXION A SERTAIN SERVEUR (TCP ... par petitchech

Commentaires et avis

Commentaire de crunch117 le 16/07/2007 19:07:39

C'est pas mal du tout, je te met un 8/10!

Mais dis-moi il n'y aurait pas un peu trop de fichiers pour un projet de cette taille ?

Il y a des méthodes que j'ai déja vu qui sont tout a fait dans l'esprit d'un wrapper C++ qui encapsulerait les fonctions des sockets, c'est l'utilisation de flux, genre a chaque socket tu associes un flux qui prends en charge les envois/réceptions, comme cela, l'utilisateur n'a plus à se soucier de la manière dont les données sont transmises (les opérateurs << et >> font très bien l'affaire !).

Une dernière chose, j'ai vu que tu avais prévu d'ajouter la compatibilité avec Sun, où en est tu ?

Commentaire de turnerom le 16/07/2007 19:49:15

Les fichiers sont nombreux car il y'a la doc au format html/Doxygen dans l'archive.
Sinon, pour sun, je ne sais pas ou tu as vu ca. Je n'ai pas de sun sous la main, mais si quelqu'un veut faire le portage (ce qui ne doit pas être très compliqué) je l'ajouterai bien volontiers au projet.

Commentaire de AimLess le 19/07/2007 01:12:14

Bonsoir,

pour mainS sous dev-c++ pas de soucis WAITING TRANSMISSION DATA mais pour le MainC j'ai le message : "This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information."

Quelqu'un aurait-t-il une idée ? merci d'avance

Commentaire de turnerom le 19/07/2007 01:21:33

As-tu utilisé les 2 fichiers main présent ou les as-tu modifiés?
Car dans l'exemple c'est de l'udp donc le client doit être lancé en 1er puis le serveur.

Commentaire de AimLess le 19/07/2007 01:38:58

Houla bah alors pas au lit ;-) Merci pour la réponse

J'ai gardé tes fichiers sources, et l'ordre d'exécution est respecté.

(Je lance les deux applications sur le même PC... Est ce un problème docteur ?)

Commentaire de turnerom le 19/07/2007 10:47:14

Je viens de retester, chez moi ca marche. Je suis sous XP (SP2) je compile avec gcc version 3.4.4 (mingw special) sous Code::Blocks. Et je lance le client puis le serveur sans rien toucher sa marche.

Commentaire de turnerom le 19/07/2007 10:54:25

J'ai rajouté les 2 projet qui m'ont servi à faire les executables dans makefiles/win32. Essaye de compiler avec pour voir.

Commentaire de AimLess le 19/07/2007 15:02:33

Merci pour tes réponses...
D'acc, je me suis mis sous Code::Block et maintenant j'ai le message :

Switching to target: Release
Project   : libC
Compiler  : GNU GCC Compiler (called directly)
Directory : E:\dev\cppfrance_LIBCONNECT-BIBLIOTH-200-CPLUSPLUS-CONNEXION_43473 -2\libconnect\makefiles\win32\
--------------------------------------------------------------------------------
Switching to target: Release
Linking console executable: ..\..\build\win32\libC.exe
C:\Program Files\CodeBlocks\lib\libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `WinMain@16'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings



Commentaire de AimLess le 19/07/2007 15:26:59

Re bonjour Turnerom,

C'est ok pour moi sous code block :
  - Téléchargement de code block 1rc02
  - Puis installation de la nightybuild (du jour)
  + wxwidget (enfin la dll pour la nightybuild)

Recompilation des biblio statics et des exes... Et ça tourne

Merci pour l'aide,

Commentaire de AimLess le 19/07/2007 15:31:35

Question pour ma culture perso :
  - Que penses tu de l'intéropabilité de WXWidget ?
  - Code block fonctionne réellment sous tous les OS comme j'ai pu le lire ? L'IHM de Code::Block est développé sous WxWidget ?
  
Merci d'avance pour tes lumières

Amic,

Cpt Aimless

  

Commentaire de turnerom le 19/07/2007 15:43:44

tu as du te planter quelquepart dans la manip, parceque la il essaye de compiler main.c alors que mes fichiers s'appellent mainC.cpp et mainS.cpp.
Arrives-tu à compiler un programme tout simple avec C::B ?

Commentaire de turnerom le 19/07/2007 15:46:39

oui j'ai testé C::B sous linux et MAC ca marche.
Mais sur linux je préfère quand même utiliser Xemacs + makefile.

sinon wxwidget je suis pas fan, pour des interfaces graph de qualité multiplateforme y'a rien de mieu que Qt

Commentaire de Sphost le 01/08/2007 23:33:52

Bonjour,

Tout d'abord merci pour ce code.

Je suis sous Ubuntu et je rencontre des problèmes avec ce prog :
  Au début impossible de lancer le serveur après le client, car il revenait en erreur dès le début, après avoir fouillé un peu je me suis rendu compte que le MakeFile-server sous linux n'était pas bon car on compilait mainC.cpp au lieu de mainS.cpp.
  Après correction quand je lance le client et le serveur séparément ça passe, mais dès que je lance les deux (d'abord le client, puis le serveur) le serveur plante directement :
"./libconnectS
terminate called after throwing an instance of 'std::string'
Abandon"
Et là pas moyen de savoir d'où vient le problème (sachant que mes connaissances sont limitées) rencontres-tu le problème également?
Pour info, je n'ai rien changé au code, juste compiler puis exécuter.

Commentaire de ldubost le 13/08/2007 09:09:42

Bonjour,
Je suis sous LINUX Redhat Enterprise 4.0 et j'ai le même problème que "Sphost".
A priori l'erreur vient de cette ligne :
--> string err ( "baratin" + WSAGetLastError () ) ;  
Je l'ai remplacé par :
--> string err ( "baratin" ) ;
--> perror ( "Error message : " ) ;
Cela supprime le plantage lors de l'affichage de l'erreur.

Sinon j'ai ajouté aussi danns udp.cpp ligne 121 un htonl()
--> id_client.server.sin_addr.s_addr=htonl(INADDR_ANY) ;
Cela supprime le plantage du client.

Par contre la communication ne fonctionne toujours pas ...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Socket TCP/UDP [ par hobbes ] Bonjour,j ai cru comprendre qu il existe 2 types de sockets (TCP et UDP) pouvant permettre l echange de donnees entre 2 applications sur le reseau.Pou raw socket et protocole TCP/IP [ par robertmouac ] Bonjour tout le monde. Je suis en train de coder une version simplifier du protocol TCP/IP en raw socket. Je formate et deformate bien les trames (ve Pb connexion HTTP avec socket. [ par LuckyNut ] Bonjour,J'ai fait un prog permettant de lire des pages html à partir des sockets. Tout marche chez moi mais le programme ne marche pas chez un pote qu Thread et socket udp [ par eurysthe ] Bonjour !!Voila j'ai un petit problème de thread qui me pourrit la vie.J'ai crée un thread qui doit écouter en boucle les informations qui transite su recherche exemple [ par doberman7578 ] Dans le cadre d'un projet en bts informatique(en C sous linux), je dois effectu&#233; un sereur client transfert d'image ( ce que j'aieffectu&#233;) m Envoi de message UDP sans socket ???? [ par thealex321 ] Salut &#224; tous!Bon, ma question est vraiment parce que je ne comprends pas comment on peut envoy&#233; un message sans cr&#233;er un socket pour l' (SOCKET) Tester si des ports TCP sont libres [ par supergrey ] Voila pour mon programme qui utilise les sockets j'ai besoin de 3 ports libres, de pr&#233;f&#233;rence cons&#233;cutifs, pour se connecter &#224; 3 s 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 probleme socket + API ( +thread ?) [ par lolorenzeb ] Bonjour à tous,Voila j'avais deja poster dans un précédent sujet mais comme j'ai revu tout mon code cela va etre plus simple de répondre. J'ai donc cr Problème linkage [ par M5i9k ] Salut à tous!Je débute les socket en c++ et j'ai un problème à la compilation, est-ce que quelqu'un pourrait m'expliquer, voici mon code :// Serveur T


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

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 : 0,702 sec (4)

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