Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Cours programmation réseau en C++ - chapitre 2 : TCP - envoi et réception de données
Un tutoriel de Bousk

Le , par Bousk

0PARTAGES

6  0 
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/

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de François DORIN
Rédacteur https://www.developpez.com
Le 26/01/2017 à 17:11
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
5  1 
Avatar de jopopmk
Membre expert https://www.developpez.com
Le 08/07/2016 à 11:35
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++
2  0 
Avatar de Bousk
Rédacteur/Modérateur https://www.developpez.com
Le 20/01/2019 à 16:45
Tu as une version compilée avec VS2015 dans Samples/Win10, il faut les redistributables VS2015 pour la lancer.
Les codes sources sont accessibles via le lien "Télécharger les codes sources du cours" tout en bas de l'article. Un lien a été ajouté plus haut pour plus de clarté.

Sinon tu peux la recompiler depuis les solutions, VS2013 & VS2015 sont proposées. Elles sont upgradables vers VS2017 sans soucis.
Il y a un problème avec les versions de Win10 plus récentes, il faut changer les tests #if _WIN32_WINNT == _WIN32_WINNT_WINBLUE en #if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE dams Main.cpp et Clients_Sample/Sockets.hpp
L'article a été mis à jour avec ces corrections.
2  0 
Avatar de Bousk
Rédacteur/Modérateur https://www.developpez.com
Le 09/07/2016 à 13:20
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.
1  0 
Avatar de jblecanard
Membre expert https://www.developpez.com
Le 27/01/2017 à 17:15
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 .
1  0 
Avatar de Bousk
Rédacteur/Modérateur https://www.developpez.com
Le 12/09/2019 à 16:23
As-tu l'article entier ? Pourquoi elle ne fonctionnerait pas ?
La première moitié de l'article parle et montre les problèmes d'endianness et indique comment les résoudre via des conversions.
Les implémentations suivantes utilisent ces conversions pour contrer ce problème.
1  0 
Avatar de Gouyon
Membre éprouvé https://www.developpez.com
Le 18/07/2016 à 8:07
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.
0  0 
Avatar de oodini
Membre émérite https://www.developpez.com
Le 21/07/2016 à 1:10
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.
0  0 
Avatar de Bousk
Rédacteur/Modérateur https://www.developpez.com
Le 21/07/2016 à 10:48
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.
0  0 
Avatar de oodini
Membre émérite https://www.developpez.com
Le 21/07/2016 à 17:21
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 !
0  0 
Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web