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

Cours programmation réseau en C++

TCP - Envoi et réception de données

Maintenant que nous savons nous connecter à un serveur, il est temps de communiquer avec lui : envoyer et recevoir des données.

53 commentaires Donner une note à l´article (5) 

Article lu   fois.

L'auteur

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Envoyer des données

send - int send(int socket, const void* datas, size_t len, int flags);

Envoie des données au socket en paramètre. 

  • socket est le socket auquel envoyer les données. 
  • datas les données à envoyer. 
  • len est la taille maximale des données à envoyer en octets. 
  • flags un masque d'options. Généralement 0.

Retourne le nombre d'octets mis en file d'envoi dans la mémoire tampon du système. Peut retourner 0. Retourne -1 sous Unix, SOCKET_ERROR sous Windows, en cas d'erreur.

L'appel à cette fonction est bloquant tant que tous les octets à envoyer n'ont pas été mis en file d'envoi.

send
Sélectionnez
SOCKET socket;
// initialisation et connexion
char buffer[1024];
if (send(socket, buffer, 1024, 0) == -1)
        	// erreur

II. Recevoir des données

recv - int recv(int socket, void* buffer, size_t len, int flags);

Réceptionne des données sur le socket en paramètre. 

  • socket est le socket duquel réceptionner les données. 
  • buffer est un tampon où stocker les données reçues. 
  • len est le nombre d'octets maximal à réceptionner. Typiquement, il s'agira de la place disponible dans le tampon. 
  • flags est un masque d'options. Généralement 0.

Retourne le nombre d'octets reçus et stockés dans buffer. Peut retourner 0 si la connexion a été terminée. Retourne -1 en cas d'erreur.

L'appel à cette fonction est bloquant tant qu'aucune donnée n'est reçue par votre socket et que la connexion n'est pas terminée.

recv
Sélectionnez
SOCKET socket;
// initialisation et connexion
char buffer[1024];
if (recv(socket, buffer, 1024, 0) <= 0)
        	// erreur ou connexion fermée

Training Time ! Lancez ou compilez le TD 02. Un serveur se lancera sur le port de votre choix. Créez un client pour vous y connecter (vous pouvez, voire devriez, utiliser le précédent en l'améliorant), puis à l'aide de ce client envoyez une phrase. Vous devriez voir la phrase s'afficher dans la console du serveur et il vous renverra la même phrase avec l'ordre des mots modifié aléatoirement.

Vous retrouverez les lignes de la partie précédente relative à la connexion d'un client. Quand le client envoie une phrase, celle-ci sera affichée, ainsi que la version modifiée qui lui est renvoyée.

C:\Article_Dvp\documents\network-TCP02-dvp\images\image2.png

Vérifiez que vous recevez les données correctement sur votre client.

III. Proposition de corrigé

Nous allons simplement modifier notre classe TCPSocket précédemment créée pour y ajouter le nécessaire à l'envoi et la réception de données.

Pour l'instant, il s'agira d'un simple wrapping autour des fonctions send et recv que nous avons découvertes dans cette partie.

Les prototypes seront donc tout simplement :

prototypes
Sélectionnez
int Send(const char* data, unsigned int len);
int Receive(char* buffer, unsigned int len);

L'implémentation n'aura rien de particulier non plus :

implémentation
Sélectionnez
int TCPSocket::Send(const char* data, unsigned int len)
{
   	return send(mSocket, data, len, 0);
}
int TCPSocket::Receive(char* buffer, unsigned int len)
{
   	return recv(mSocket, buffer, len, 0);
}

Rien d'extraordinaire jusque là, il est temps de passer à la partie suivante :)

Télécharger les codes sources du cours

Article précédent Article suivant
<< TCP - Premiers-pas TCP - Mise en place du protocole >>

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2016 Cyrille (Bousk) Bousquet. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.