Skip to content
Snippets Groups Projects
Commit 8bd52fef authored by Kirill's avatar Kirill
Browse files

MAJ readme

parent 75262e7b
Branches
No related merge requests found
......@@ -4,21 +4,21 @@
Complétez le programme `receiver-tcp.c` pour recevoir un message texte avec les protocoles `IPv4` et `TCP` et l'afficher sur la sortie standard. Vous devrez également afficher l'adresse IP et le port du client dès sa connexion à votre programme.
Le programme admet en argument le numéro de port sur lequel le programme doit écouter :
Le programme admet en argument l'adresse IP et le numéro de port sur lequel le programme doit écouter :
./receiver-tcp port_number
./receiver-tcp ip_addr port_number
Les seuls numéros de port valides sont ceux contenus dans l'intervalle `[10000; 65000]`.
La sortie de votre programme doit être de la forme suivante :
./receiver-tcp
./receiver-tcp 192.168.1.233 12345
192.168.1.1 54678
hello world
Une telle sortie indique que le client ayant pour adresse `192.168.1.1` et le port `54678` s'est connecté à votre programme et a transmis le message `hello world`.
On fera l'hypothèse que le message aura une taille maximum de `SIZE` caractères avec `SIZE < 100`.
Votre programme devra être en mesure de recevoir jusqu'à SIZE octets.
**Objectifs :** savoir créer un socket, se mettre en attente d'une connexion TCP entrante, et réceptionner un message texte en TCP.
......@@ -28,13 +28,13 @@ Vous devez dans un premier temps créer un socket `IPv4` et `TCP` via la primiti
int socket (int domain, int type, int protocol)
Le protocole `TCP` met un temps non négligeable pour fermer un socket afin d'être sûr que tous les segments appartenant à la connexion qui vient de se terminer ne puissent pas être acceptés à tord par une nouvelle connexion avec le même quadruplet (adresse source, port source, adresse destination, port destination). Cela permet également de s'assurer que l'hôte distant a bien terminé la connexion. Cependant, ce mécanisme ralentit significativement les tests qui utilisent le même quadruplet à plusieurs reprises. Pour éviter cette attente, vous devez ajouter le code suivant après avoir créé le socket (en supposant que le descripteur correspondant est contenu dans la variable `sockfd`):
Le protocole `TCP` met un temps non négligeable pour fermer un socket afin d'être sûr que tous les segments appartenant à la connexion qui vient de se terminer ne puissent pas être acceptés à tort par une nouvelle connexion avec le même quadruplet (adresse source, port source, adresse destination, port destination). Cela permet également de s'assurer que l'hôte distant a bien terminé la connexion. Cependant, ce mécanisme ralentit significativement les tests qui utilisent le même quadruplet à plusieurs reprises. Pour éviter cette attente, vous devez ajouter le code suivant après avoir créé le socket (en supposant que le descripteur correspondant est contenu dans la variable `sockfd`):
/* SO_REUSEADDR option allows re-starting the program without delay */
int iSetOption = 1;
CHECK (setsockopt (sockfd, SOL_SOCKET, SO_REUSEADDR, &iSetOption, sizeof iSetOption));
Ensuite, vous pouvez récupérer votre code de l'exercice 3 pour renseigner l'adresse `127.0.0.1` et le port passé en argument du programme à l'aide de la fonction `getaddrinfo()` et lier le socket avec `bind()`. N'oubliez pas de mettre à jour le type de socket dans la structure `hints`.
Ensuite, vous pouvez récupérer votre code de l'exercice 4 pour renseigner l'adresse IP et le port passés en argument du programme à l'aide de la fonction `getaddrinfo()` et lier le socket avec `bind()`. N'oubliez pas de mettre à jour le type de socket dans la structure `hints`.
Il faut maintenant configurer la taille de la file d'attente pour les connexions entrantes via la primitive :
......@@ -56,9 +56,11 @@ Sans option (`flags = 0`) cette primitive est équivalente à :
ssize_t read (int desc, void *buf, size_t nbyte)
Vous pouvez tester votre programme avec le programme réalisé dans l'exercice précédent ou en exécutant la commande `nc` (netcat) dans un autre terminal. Lancez votre programme dans un terminal puis exécutez la commande suivante dans un second terminal afin d'envoyer le message `hello world` en `TCP` sur l'adresse `127.0.0.1` et le port utilisé par votre programme, et en utilisant le port local de votre choix :
que vous pouvez utiliser si vous êtes nostalgique de l'UE programmation système.
echo "hello world" | nc -4 -w1 127.0.0.1 port_du_prog -p port_local_pour_netcat
Vous pouvez tester votre programme avec le programme réalisé dans l'exercice précédent ou en exécutant la commande `nc` (netcat) dans un autre terminal. Lancez votre programme dans un terminal puis exécutez la commande suivante dans un second terminal afin d'envoyer le message `hello world` en `TCP` sur l'adresse IP et le port utilisé par votre programme, et en utilisant le port local de votre choix :
echo "hello world" | nc -4 -w1 ip_du_prog port_du_prog -p port_local_pour_netcat
Vérifiez ensuite que l'adresse et le port de l'expéditeur ainsi que le message sont correctement affichés par votre programme sur la sortie standard.
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment