IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

Developper une application VOIP!


Sujet :

Développement

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut Developper une application VOIP!
    Bonjour!

    Je suis sur un projet de creation d'une application de VOIP fonctionnant sur la bse d'un protocole SIP que je dois moi meme implemanter.

    Pour le projet, voici les exigences generales:
    - L'application doit etre protable sur windows et linux
    - le protocole de communication doit etre binaire
    - la communication client-client se fera en UDP et client-serveur en TCP
    - Je n'ai droit a aucune librairie SIP existante

    Alors mon probleme reside au niveau de la gestion des adresses IP natees.

    Dna sma conception actuelle, mon serveur permettra l'enregistrement et l'authentification des utiliateurs via une base de donnees interne. Comment puis-je faire pour que :

    - Mon serveur situe a un coin du monde et coonnecte a internet , mes clients situes a des zones distantes et diferentes du monde, puissent echanger les informations de maniere a ce que un client puisse etablir une connexion directe a un autre, ou que plusieurs clients puissent echanger a la fois via le mode conference?

    - Sur internet les adresses sont natees et je sais que les routeurs/passerelles de chaque reseau sauront rediriger les paquets, mais comment un client se connecte a un autre client distant (sur un autre reseau) avec un port?

    - J'ai prevu d'implementer un mode proxy pour serveur, qui permettra de gerer le probleme d'adresses ip natees, afin de permettre l'interconnexion entre clients sur la base d'informations recues du proxy (Adresse ip du destinataire a joindre, port d'ecoute...). Mais quelles adresses ip les clients utiliseront etant donne que chaque client possede une ip prive sur le reseau ou il se trouve?

    - Comment je vais gerer mes sockets dans ce projet? De la meme facon que pour les applications fonctionnant en local?

    J'espere que je ne suis pas tres difficile a comprendre, si oui mon probleme se resoud a ceci:
    Quel protocole puis-je mettre en place pour transmettre la voix, le texte et la video entre clients distants et entre clients et mon serveur sur internet? Quelle architecture logicilelle me proposeriez-vous, avec les contraintes materielles/reseau a respecter cote client et serveur (Comment implementer le mode proxy sur le serveur, gerer les communbications client-client direct sans relai par le serveur, gerer les conferences(communication un a lpusieurs)).

    Je n'ai pas encore de probleme au niveau du code, j'ai plutot besoin a travers votre assistance, de peaufiner la conception de mon projet afin de bien le realiser.

    Merci infiniment pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Bonjour!

    J'avoue que le contenu de mon thread n'était surement pas adapte au forum, je vais ici reformuler mon premier message.

    En effet je me suis davantage bien penche sur l'architecture du système que je vais mettre en place. Et les choses sont de plus en plus clair en théorie.
    Toutefois cote réseau, il y a une question que je ne m'étais jamais réellement posée jusqu'à ce jour, et malgré mes compétences en réseau je n'ai pas pu répondre a ma question.

    En effet je me demande comment les communications sont gerees sur internet, en envoie et en reception. Pour ma part j'ai jusqu'ici configure des routeurs pour rediriger des connexion sortantes, faire du NAT... Pour les connexions entrante j'ai souvent fait des redirection sur le routeur en lui indiquant explicitement vers quelle adresse locale rediriger une requete arrivant sur tel ou tel autre port.

    Alors la question que je me pose est celle-ci: Comment un paquet/message parvient a transiter sur internet jusqu'à une application spécifique d'un ordinateur spécifique d'un réseau prive distant, sans qu'aucune redirection soit faite sur le routeur d'entrer? Je prends un exemple sur les applications de messagerie instantanée, chat.

    Quand le développeur crée son application, il la met a la disposition des utilisateurs qui la téléchargent et peuvent l'installer sur leur machine pour l'utilise sur n'importe quel réseau du monde connecte a internet et communiquer.

    A priori un client ne sait pas exactement quelle adresse ip un autre utilise sur internent, il ne connait que son login sur le système qu'ils utilisent, par contre il est évident qu'il y a un serveur de cette application localiser quelque part dans le monde et possédant une adresse publique ou un nom (yahoo par exemple) .

    Le serveur possède surement la liste de tous les clients connectés, qui se seraient au préalable enregistrés ou authentifiés auprès de lui. Mais seulement, les clients eux sont sur des réseaux ou ils n'ont forcement pas autorité, ou l'utilisateur a par exemple juste connecté un cable rj45 a un switch et obtenu une adresse par DHCP. et une passerelle par défaut bien sur.

    Comment ce dernier (le client) une fois connecte a internet, via le routeur du réseau ou il se trouve, parvient a recevoir des message des autres, alors que administrateur du reseau ou il se trouve n'a fait aucune redirection pour lui sur son routeur (puisqu'il est simple utilisateur du réseau comme tout le reste et n'offre aucun service externe pour ce réseau, il utilise juste la connexion internet)? Comment un message part depuis une application précise de l'hôte source situe sur un réseau prive, jusqu'à une application spécifique sur un hôte de destination?

    Qu'est ce qui permet exactement aux routeurs internet, dans les en entête des paquets de déterminer que ce paquet va un hote parmi tant d'autres sur un réseau privé, et vers une application spécifique parmi tant d'autres application tournant en même temps sur l'hote. J'espere que vous ne m'enverrai pas vers les couche OSI, car on passe tous par la a la base, mais la j'ai un problème plus profond qui est de savoir, ce qui rassure un programmeur que lorsqu'il aura bien concu son application, elle marchera sur internet de n'importe quel réseau connecte sur internet, et ce de maniere generique sans contrainte sur la localisation des utilisateurs?

    C'est a ce niveau que je cherche le déclic, je veux comprendre comment ca se fait cette communication instantanée entre des clients sur internet (Je parle de clients car pour les serveurs ca se comprend, on peut faire des redirections vu qu'ils offrent des services qui sont connus de l'administrateur, et des fois possèdent des ip publiques ou des enregistrements dns). Je tiens tellement a comprendre le mécanisme client-client a travers internet, je me suis rendu compte depuis quelques jours que je dois moi même permettre a deux personnes de communiquer sur internet sans se connaitre en termes d'adresse, que c'est un cote du réseau qui n'est pas encore bien claire a mon niveau.

    J'espère que cette fois ma question est une plus concise et ne mélange pas les domaines, car la je suis vraiment au niveau de la communication sur le réseau internet, et je pense que la bonne compréhension de ce point m'aidera pour les choix que je ferai dans la réalisation de mon projet.

    J'espère pouvoir compter sur votre collaboration, et je vous remercie pour votre attention.

    Merci et a très bientôt.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Salut!

    Je veux juste dire que j'ai fini par trouver les bonne reponses aux questions que je me posais. je ne sais pas si c'est la flemme qui m'a pousser a rester un peu con pendant tant d'heures.

    Je m'excuse d'avoir un peu perturbe le forum avec ma question. En fait c'est simple je pense, on pourra tout faire en applicatif, mais pour acceder a un ordinateur en privee derriere un routreur et n'ayant pas autorite sur le reseau ou il se trouve, il faudrait soit que l'on n'ait fait une redirection specifique sur cet ordinateur au niveau du routeur, soit faire du VPN, IP fixe ou autre manip de ce genre, ce qui n'est pas trop le but de mon projet, qui est surtout de pouvoir faire circuler differents types de donnees sur un reseau, et non interconnecter les reseaux a priori.

    Pour ceux qui ne sont pas tres experimentes en reseau et que mon post a failli derouter, ce n'etait vraiment pas une question a poser en reseau, ou si oui pas de cette facon.

    Je souhaiterai donc qu'on remette le compteur a zero pour ce post, je m'arrangerai a faire marcher les choses d'abord en local, et apres pour l'extension ce sera autre chose, car ca releve exclusivement du reseau dans ce cas et je reviendrai vers vous s'il faut.

    Merci pour votre patience et une fois de plus pardon d'avoir perturbe le forum.

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 408
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 408
    Points : 20 551
    Points
    20 551
    Par défaut
    Citation Envoyé par sympaval Voir le message

    Quel protocole puis-je mettre en place pour transmettre la voix, le texte et la video entre clients distants et entre clients et mon serveur sur internet? .

    c'est pointu ce que tu veux faire.
    Tu ne peux pas utiliser des protocoles déjà existant ?
    Sinon il faudra que tu déclares le protocole entièrement par toi-même.
    Et puis pour transmettre la voix et des vidéos il faut faire de la compression de données.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Merci!

    Enfin quelqu'un qui a voulu me repondre.

    En effet je sais bien que c'est lourd comme projet. Pour mon protocole je l'ai deja entierement etabli, meme si je vais un peu le peaufiner par des rectifications a mesure de l'avancement du projet.
    Apres pour la transmission et la signalisation, j'ai pris la peine de ne pas melanger les choses.
    Donc je gere la compression d'un cote avec port audio et speex, puis les problematiques reseaux sont traitees a part. Des que mon serveur est pret avec toutes les fonctionnalites, et mes compressions bien effectuees, je fais communiquer mes clients de un a un et par conference.
    Je ferai tout pour avoir un prototype fonctionnel a la fin de la semaine prochaine, et je vous remonterai les eventuelles difficultes.

    Merci pour ton attetion.

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 408
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 408
    Points : 20 551
    Points
    20 551
    Par défaut
    Salut Sympaval avec plaisir selon mes compétences
    sinon du code source libre ça doit se trouver pour ça

  7. #7
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    Salut, je pense avoir compris ta question, et je me pose à peu près la même. Par contre t'as l'air d'avoir la réponse mais là j'ai pas compris

    Imaginons que je veux faire communiquer deux programmes sur deux ordis différents au travers d'internet. Logiciel de chat, ou de jeu multijoueur par exemple. Je voudrais me passer d'un serveur central et permettre aux joueurs de s'envoyer directement des messages les uns aux autres...

    Je me demande comment les différents joueurs pourraient se trouver, se parler, se contacter sans l'utilisation d'un serveur global ?

    Y aurait il un service du genre : Je me logue, j'indique mon user et que je veux me connecter au groupe "trucmuche" et le serveur me renvoie la liste des clients connectés sur le même "canal". Est-ce qu'il existerait un service de ce style sur le web ?

    Merci

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Salut!

    je m'excuse de repondre un peu tardivement a ta question. En fait je vais te repondre en deux mots:

    - Tu pourra implementer ce qui te plait comme protocole applicatif, et au niveau de la signalisation. Ceci releve exclusivement du domaine du developpeur.

    - Par contre au niveau de la communication, pour ce qui est des couches transport et inferieur, tu dois appliquer des standards deja definis et qui permettent aux reseaux aujourd'hui de fonctionner.
    Ceci dit, pour faire communiquer deux ordinateurs sur internet quelques soient les applications concernees, tu dois avoir un moyen logique(adresse ip) et physique(adresse mac) de les joindre.
    Soit les deux pc sont sur le meme reseau, soit ils sont sur internet et possedent des adresses publiques, soit il une ou plusieurs redirections qui menent un poste vers un autre.
    Certains logiciels de messagerie comme msn et compagnies doivent surement avoir des proxies repartis un peu partout sur internet, qui relaient un utilisateur jusqu'a un autre en fonction de leur situation geographique. C'est en fait ca internet en gros, un reseau de reseau, donc une serie de <<routeurs>> interconnectes.

    Donc pour tout te dire, tu developpes ton application, si il y a du reseau tu programme ou fais de bonne abstractions sur tes sockets, et tu la fais marcher en local. Apres si tu veux l'etendre a internet, tu prends les dispositions reseau qui s'impose(IP publique, NAT statique, dynamique) et tu n'auras plus qu'a faire des ajustements mineurs au niveau de ton application, si celle-ci marchait deja bien a la base.

    Par contre moi j'ai une petite question. Pour des raisons de portabilite, j'utilise QTNetwork sur mon client pour le reseau, et Boost.Asio sur le serveur. Seulement la libraie Boost a une facon particuliere d'utiliser les buffers pour les lecture et ecriture sur la socket(le file descriptor). J'ai envie de lire sur ma socket (avec un async_read) et faire un reinterpret_cast par exemple de mon buffer en un pointer sur un type que j'ai moi meme defini pour ma serialisation (Exemple Content *). Mais j'y arrive pas, ca compile pas. Si quelqu'un sait bien s'y prendre avec boost, j'aimerais des astuces.

    Merci.

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Bonsoir a tous!

    Comme je vous disais ce matin, je rencontre des problemes difficile a comprendre pour moi avec boost, j'espere que quelqu'un pourra sortir d'ici et me sauver la vie.

    En effet comme j'ai precise precedemment, il m'est demande pour le projet d'utiliser QTNetwork pour le reseau cote client, et Boost cote serveur.

    Dans la commnication entre un client et le serveur, je dois lire les donnees sur une socket, et puisqu'a l'avance je connais pas la taille des donnees a lire j'ai choisi l'option de recuperer d'abord la taille a lire dans une std::string que je vais convertir ensjuite en int, puis je redimensionne le vector prevu pour la lecture a cette taille. Ensuite je fais un async_read en passant un parametre un boost::asio::buffer construit avec le vector.
    Ceci me permettra manipuler le vector pour recuperer la donnee.
    Mais j'ai une erreur qui m'est signalee a la compilation tout bizard, car l'erreur est rencontree dans le header consoming_buffer.hpp, qui est un header boost.
    Voici mon code:
    Packet * TCPServerSocket::receive()
    {
    Packet* packet = new Packet;

    boost::asio::async_read(this->_socket, boost::asio::buffer(this->_data_size),
    boost::bind(&TCPServerSocket::handle_length,
    this, boost::asio::placeholders::error));
    if (this->_error_code != 0)
    {
    boost::asio::async_read(this->_socket, boost::asio::buffer(this->_inbound_data),
    boost::bind(&TCPServerSocket::handle_receive,
    this, boost::asio::placeholders::error));
    if (this->_error_code != 0)
    {
    char * data = "papi";//c'est juste pour tester, je vais recuperer la data plus tard
    packet->setContent(reinterpret_cast<Packet::Content*>(data));
    }
    else
    packet = NULL;
    }
    return (NULL);
    }
    Dans le code il faut juste comprendre que j'ai fait une abstraction socket avec boost, et que la je suis dans ma fonction membre receive. Tout marche bien quand je commente les lignes allant du premier appel a bosst::asio::async_read et le deuxieme, mais lorsque je la remet j'ai cette erreur dans mon IDE (Visula studio):

    error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const boost::asio::const_buffer' (or there is no acceptable conversion) c:\program files (x86)\boost\boost_1_46_1\boost\asio\detail\consuming_buffers.hpp 161
    Le souci est donc au niveau de l'appel a boost::asio::sync_read, mais je ne comprends pas car j'ai l'habitude d'utiliser les buffers boost de cette facon pour lire et ecrire sur les sockets.

    Quelqu'un pourrait me dire d'ou ca peut provenir? Ou alors me donner une meilleure methode pour faire mes lectures et ecritures en reseau avec boost cote client et Qt cote serveur?

    Merci pour votre attention.

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Points : 130
    Points
    130
    Par défaut
    Bonjour!

    Problème résolu et projet termine.

    Merci

  11. #11
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2019
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par nixmind Voir le message
    Bonjour!

    Problème résolu et projet termine.

    Merci


    Bonjour!

    Je suis entrain de mettre en place ce genre de projet?
    Vous pouvez me contacter à mon mail diarraf@yahoo.fr

    Merci d'avance et bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Console] developper une application pour xbox
    Par fan dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 03/02/2011, 14h08
  2. Est-il Aise De Developper Une Application Webdev
    Par TYSZLER dans le forum WebDev
    Réponses: 1
    Dernier message: 10/02/2007, 11h23
  3. Réponses: 3
    Dernier message: 09/05/2006, 16h16
  4. Réponses: 4
    Dernier message: 07/02/2005, 22h22
  5. Conseils pour developper une application avec Oracle
    Par belugha dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 02/06/2003, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo