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

C++ Discussion :

Cours sur la programmation réseau [Tutoriel]


Sujet :

C++

  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours sur la programmation réseau
    Bonjour à tous,

    je vous présente un projet que je mène actuellement, à savoir l'écriture d'un cours de programmation réseau, sur l'utilisation de la bibliothèque socket, en C++.
    Il s'agit de la version réécrite et améliorée d'un cours que j'ai dispensé aux étudiants de l'ESGI Paris en 2015.
    Le but de cette série est de démystifier l'utilisation du réseau et de vous permettre d'en profiter dans vos applications.

    Chaque partie présente simplement une composante (connexion, envoi de données…) et vous permet de comprendre son fonctionnement, puis de la mettre en pratique immédiatement, via un TP et des codes sources fournis.
    À la fin de cette série, vous serez en possession des briques élémentaires nécessaires à la mise en place d'échanges réseau dans votre programme, sous forme de classes C++ utilisant l'API socket de votre système.

    Dans un premier temps, nous apprendrons à appréhender les échanges en TCP, d'abord en tant que simple client, puis comme serveur.
    Ensuite nous verrons l'utilisation d'UDP.
    L'utilisation de threads et mutex sera également abordée.
    Enfin certaines techniques plus spécifiques aux jeux vidéos seront présentées sous forme d'articles, publiés dans la section idoine.

    Les articles seront diffusés au fur et à mesure de leur (ré)écriture. Retrouvez-les ci-dessous.
    Introduction
    TCP
    - Premiers pas
    - Envoi et réception
    - Mise en place du protocole
    - Premiers pas en tant que serveur
    - Envoi et réception depuis le serveur
    - Mode non bloquant pour le client
    - Quelle architecture de client visée ?
    - Un premier serveur : miniserveur

    UDP
    - Premiers pas
    - Gérer les pertes et duplications d'identifiants
    - S'assurer du bon fonctionnement de son code
    - Créer son protocole par-dessus UDP
    - Découper et réunifier des paquets & création d'un protocole ordonné non fiable
    - Envoi de paquets ordonné fiable
    - Combiner tous les protocoles : les canaux de communication
    - Gérer des connexions entre machines
    - Debugger une application en réseau

    Jeux
    - Un premier jeu : Morpion

    Divers
    - Multi-threading et mutex
    - Bases de la sérialisation
    - Sérialisation de bits
    - Sérialisation avancée

    Retrouvez tous les cours et tutoriels C++ de Developpez.com
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  2. #2
    Membre averti
    Avatar de VBurel
    Profil pro
    Développeur Indépendant
    Inscrit en
    Août 2004
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Indépendant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 116
    Points : 333
    Points
    333
    Billets dans le blog
    1
    Par défaut
    quand vous en serez à l'UDP. si vous voulez faire un cas pratique avec de l'audio,
    je vous invite à faire un exemple d'implémentation VBAN (avec mon support si besoin).
    plus d'info: http://vb-audio.pagesperso-orange.fr...eeter/vban.htm

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP01 - Premiers pas
    Voici la première partie plus concrète.
    Commençons par les échanges via protocole TCP, du point de vue du client dans un premier temps.
    Au programme : création de socket, connexion à un serveur dont on connait l'IP et passage en revue de quelques fonctions utiles de manière générale.

    http://bousk.developpez.com/cours/re...-premiers-pas/


    Retrouvez tous les cours et tutoriels C++ de Developpez.com
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP02 - Envoi et réception
    Après la mise en bouche assez conséquente, voyons maintenant comment envoyer et recevoir des données via un socket TCP préalablement connecté.
    Cette courte partie présente les fonctions send et recv dont nous verrons l'utilisations de manière plus poussée dans la partie suivante qui arrive très bientôt.

    http://bousk.developpez.com/cours/re...voi-reception/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP03 - Mise en place du protocole
    Partons cette fois un peu plus dans les détails du send et du recv, puisqu'il s'agit de mettre en place son protocole, ses règles d'échange de données, en utilisant des paquets TCP.
    Il s'agit également de la dernière partie de la première série grâce à laquelle nous savons désormais utiliser TCP en tant que client.
    La seconde partie traitera toujours de TCP, mais du point de vue du serveur maintenant.

    http://bousk.developpez.com/cours/re...ace-protocole/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    petite proposition d'amélioration : montrer la mise en place de macro/commandes prépro pour avoir un code multiplateforme unique. Je suis sûr que ça pourrait intéresser les arpètes qui passeraient sur tes tuto.

    Bonne continuation.

    edit : my bad, j'ai dû lire trop vite ou faire l'impasse sur la partie C++
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    tu veux dire exactement ce qui est fait dans la seule partie qui le nécessite jusque là ?
    Sinon je vois pas où tu en attends plus.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 076
    Points : 1 521
    Points
    1 521
    Billets dans le blog
    5
    Par défaut
    Excellent cours très clair.
    Celui là il faut que je me le garde. Je fais de temps en temps de la programmation réseau mais j'oublie régulièrement comment ça marche du coup je suis obliger de replonger dans mes archives.
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Bonne initiative.

    J'ai rarement l'occasion de faire de la programmation réseau, et cela fera une source de plus pour me remettre dans le bain.

    Je trouve toutefois qu'il manque une explication du concept de socket.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut oodini,
    à quelle explication de quel concept penses-tu ?
    J'ai eu du mal à écrire la première partie qui est sensée introduire ça, et j'ai finalement opté pour le très simple paragraphe qui s'y trouve Un socket, qu'il soit TCP ou UDP, sera défini par un simple entier qui le représente et devra être passé aux fonctions qui l'utilisent. puisque c'est suffisant imo comme information. Le but étant d'apprendre à le manipuler et pas de faire des tirades philosophiques qui finalement n'apportaient rien de plus comme information.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Quelle est la sémantique d'un socket ?
    Ça représente quoi ?

    Pas besoin de faire un long laïus : deux ou trois phrases suffisent. Tu peux parler de connecteur de transmission, par exemple.

    Inspire-toi du premier paragraphe de la page Wikipedia !

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP04 - Premiers pas en tant que serveur
    Salut à tous,

    de retour après quelques mois (été, vacances, écriture, boulot, ...)
    Il est maintenant temps de passer de l'autre côté et commencer à travailler sur la partie serveur. La partie cliente étant suffisament avancée pour notre utilisation jusque là.
    Il s'agit de la partie serveur faisant mirroir à la première partie cliente, donc seuls les concepts de connexion seront présentés : architecture très (et trop) simpliste d'un serveur, comment initialiser un socket pour être utilisé en tant que serveur, comment s'y connecter via l'ip et le port, ainsi que quelques explication pour retrouver les informations du client que l'on reçoit (IP et port).

    http://bousk.developpez.com/cours/re...-premiers-pas/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Points : 87
    Points
    87
    Par défaut Remerciements
    Merci beaucoup pour ce cours, c'est clair et précis !

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Multi-threading et mutex
    Salut à tous,

    avant de pouvoir écrire la suite du serveur, il convient de voir ce qu'est un thread, un mutex et comment les utiliser.
    Cette partie ne se veut pas être un cours à part entière sur ces objets et n'est pas du tout exhaustive mais montre le nécessaire à leur utilisation pour la suite du cours.
    Un paragraphe présente également la bibliothèque C++ rest sdk, le namespace pplx précédemment connu sous le nom de code Casablanca, mais ne sera finalement pas utilisé dans la suite du cours pour le moment.

    http://bousk.developpez.com/cours/multi-thread-mutex/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  15. #15
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,
    Citation Envoyé par Bousk
    avant de pouvoir écrire la suite du serveur, il convient de voir ce qu'est un thread, un mutex et comment les utiliser.
    Citation Envoyé par Bousk
    De manière générale, il est préférable de construire son application de manière à ce que le code soit synchronisé par construction. En effet, un mutex est un point de contention, utilisé pour que deux tâches ne puissent s'exécuter en parallèle. On verrouillera un mutex pour l'acquérir, les appels successifs ne pourront alors pas le verrouiller et devront attendre qu'il soit libéré. Il s'agit bel et bien d'une attente, donc de bloquer le thread en question.
    Comme je te l'ai déjà signalé, tu présentes les mutex de manière erronée. Un mutex n'est pas fait pour synchroniser des tâches, mais pour éviter des accès concurrents à une "ressource" (une variable, un fichier, un socket, etc...). Il est possible de gérer la synchronisation de plusieurs tâches à l'aide de mutex, mais c'est loin d'être l'utilisation première ! C'est comme planter un clou avec un tournevis. On peut le faire, mais ce n'est pas le plus pratique

    Un mutex est fait pour s'assurer qu'une ressource n'est utilisée que par une et une seule tâche en même temps. Et un bon mutex ne sert à rien 99,9% du temps

    Mais hormis ce point, good tutorial
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  16. #16
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Pour aller plus loin, peut-être que ça serait bien d'aborder la "vraie" manière de gérer de multiples connexions côté serveur, à savoir, utiliser les boucles d'événements basées sur epoll, kqueue ou IO Completion Ports. Pourquoi pas en utilisant une bibliothèque qui les abstrait comme libevent.

    Bon c'est vraiment pour la partie la plus avancée du cours, mais ça permet justement de ne pas utiliser de threads .
    Find me on github

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP05 - Envoi et réception depuis le serveur
    Salut à tous,

    il est temps que notre serveur passe la première vitesse et soit capable de réceptionner des données de ses clients et leur en envoyer.
    Plusieurs modèles sont présentés et testés : multiplier les threads, l'utilisation de select, poll ou de sockets non bloquants.

    http://bousk.developpez.com/cours/re...ption-serveur/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP06 - Mode non bloquant pour le client
    Salut à tous,

    dans la ligne directe de l'article précédent, voici un très court chapitre traitant du mode non bloquant cette fois chez le client.

    http://bousk.developpez.com/cours/re...-non-bloquant/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP07 - Quelle architecture de client visée ?
    Salut à tous,

    il s'agit d'un des derniers chapitres à propos du client TCP, dans lequel un client fonctionnel est implémenté en détail.
    Retrouvez les propriétés souhaitées pour le client qui justifient cette implémentation, ainsi qu'un exemple d'utilisation dans du code utilisateur.

    http://bousk.developpez.com/cours/re...ecture-client/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut Cours programmation réseau - TCP08 - Un premier serveur : miniserveur
    Salut à tous,

    Cet article présente la mise en place d'un miniserveur, destiné à tourner en parallèle du jeu, au sein du même exécutable, sur une machine cliente.
    La partie la plus importante, et pourtant très simple, est l'évolution du code du chapitre précédent afin de garder une interface claire et connue pour pouvoir écrire et manipuler du code serveur.

    http://bousk.developpez.com/cours/re...-mini-serveur/
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2012, 10h24
  2. Cours sur le programme DEBUG de MS-DOS
    Par Med_be dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 24/02/2011, 19h18

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