Libconnect - bibliothèque c++ de connexion

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


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)

Codes Sources

A voir également

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.