19
1 DEPARTEMENT DE MATHEMATIQUE ET INFORMATIQUE SECTION INFORMATIQUE 16 juin 2011 PRESENTER PAR : PAPE DIOP IBRAHIMA DANFAKHA BAYE AMATH AWA THIAM Section informatique Master I PROJET DE PROGRAMMATIO N DE SOCKETS EN JAVA

Projet Socket

Embed Size (px)

Citation preview

Page 1: Projet Socket

I. IntroductionII.  Première partie

A.  Application client/serveur avec TCPB.  Réponse des questions

1

DEPARTEMENT DE MATHEMATIQUE ET INFORMATIQUE SECTION INFORMATIQUE

16 juin2011

PRESENTER PAR :PAPE DIOPIBRAHIMA DANFAKHABAYE AMATH AWA THIAM

Section informatique                             Master I             

PROJET DE PROGRAMMATION DE SOCKETS EN JAVA

Page 2: Projet Socket

III. Deuxième partie  Application client/serveur avec UDP

IV. Conclusion

                 I    INTRODUCTION

Le but de ce projet est de mettre en œuvre une application gérant une architecture de messagerie instantanée simplifié suivant les protocoles TCP et UDP.

Nous allons dans un premier temps d’écrire le fonctionnement de l’architecture Client/serveur suivant le protocole TCP, puis de répondre aux différentes questions et enfin de présenter l’application client/serveur via le protocole UDP.

II. Première partie

A.  Application client/serveur avec TCP

Le fonctionnement de l’application sera d’écrit dans les différentes étapes suivantes :

2

Page 3: Projet Socket

-Le programme serveur ouvre un socket TCP d’écoute et se met en attente d’un client. Nous avons implémentés ce programme en mettant en place une interface d’accueille sur la quelle est mis deux champs de saisi et un bouton de lancement.

. Le champ « identifiant de connexion » permet de donner un nom au serveur.

. Le champ « port du serveur » spécifie le port d’écoute du serveur

. Le bouton « Demarrer le serveur » démarre le serveur

Une foi cliqué sur le bouton «Demarrer le serveur » le programme nous redirige vers la nouvelle fenêtre ci-dessous du serveur. Cette dernière permet d’afficher les messages que le client envoit.

3

Page 4: Projet Socket

-Le programme client permet d’accepter la connexion pendante en spécifiant l’adresse et le port d’écoute du serveur. Nous avons implémentés ce programme en mettant en place une interface d’accueille sur la quelle est mis trois champs de saisi et un bouton de lancement.

. Le champ « identifiant de connexion » permet de donner un nom du client.

. Le champ « Adresse du serveur » spécifie l’adresse du serveur

. Le champ « port du serveur » spécifie le port d’écoute du coté serveur

4

Page 5: Projet Socket

. Le bouton « Demarrer le client » accepte la connexion pendante du coté serveur

La compilation de la classe contenant la fonction main du client renvoi la fenêtre suivante :

Une foi cliqué sur le bouton «Demarrer le client » le programme nous redirige vers les nouvelles fenêtres ci-dessous du client et du serveur. Cette interface permet au client de saisir le texte qu’il envoit au serveur et de réceptionner en même temps la réponse du serveur.

5

Page 6: Projet Socket

6

Page 7: Projet Socket

B      .  Réponses aux questions      :  

1. Pour gérer la communication avec un seul client, un objet de type ServerSocket et un objet de type Socket sont nécessaire au niveau du serveur.

7

Page 8: Projet Socket

Le rôle de l’objet ServerSocket est de créer un socket d’écoute sur un port (Les demandes de connexion initiées du coté client).Le serveur passe le port sur lequel il souhaite écouter au constructeur ServerSocket. Une

fois le socket serveur créé, il appelle la méthode accept() pour attendre une connexion client.La méthode accept() bloque l’exécution jusqu’à ce qu’une connexion avec un client soit opérée. Lorsqu’uneconnexion est établie, une nouvelle instance Socket est retournée.L’objet de type Socket permet de retourner une réponse du serveur au client ou de recevoir les données d’un client (cette méthode ne sert pas a accepter les demandes de connexion).L’objet ServerSocket appartient à la classe ServerSocket : qui permet d’ouvrir un port de communication. L’objet de type Socketappartient à la classe Socket : permet de traiter les données à travers des flux d’entre-sorties (InputStream et OutputStream).

2 Le constructeur du socket client prend deux arguments qui sont : l’adresse destination et le port du serveur destination.Le port local de la connexion est le même que le port du serveur et ces ports sont choisis entre 1024 et 65535 .

3. Pour finir une connexion, nous fermons le socket en utilisant la méthode close () du Socket.Les deux messages sont le message de déconnexion de l’expéditeur et l’acquittement du destinataire. Les flags sont les IOException qui gèrent les exceptions générées s’il ya erreur de fermeture.

4. L’envoie d’un message d’un client vers le serveur n’est pas immédiat. Par exemple si on déclare un temporisateur (long tp1=System.nanoTime ();) juste après l’envoie du client et on l’arrête juste après la réception on aura la durée de transmission des données .Ce non immédiateté s’explique par le fait que :-grâce aux numéros de séquence et d'acquittement, les systèmes terminaux peuvent remettre les données reçues dans l'ordre à l'application destinataire.-les numéros de séquence sont utilisés pour décompter les données dans le flux d'octets. On trouve toujours deux de ces nombres dans chaque segment TCP, qui sont le numéro de séquence et le numéro d'acquittement. Le numéro de séquence représente le propre numéro de séquence de l'émetteur TCP, tandis que le numéro d'acquittement représente le numéro de séquence du

8

Page 9: Projet Socket

destinataire. Afin d'assurer la fiabilité de TCP, le destinataire doit acquitter les segments reçus en indiquant qu'il a reçu toutes les données du flux d'octets jusqu'à un certain numéro de séquence qui indique le premier octet des données.

Par exemple, le scénario d'un échange de segments par Telnet est d’écrit par les étapes suivantes :

a- L'hôte A envoie un segment à l'hôte B contenant un octet de données, un numéro de séquence égal à 42 (Seq = 42) et un numéro d'acquittement égal à 79 (Ack = 79),

b- L'hôte B envoie un segment ACK à l'hôte A. Le numéro de séquence de ce segment correspond au numéro d'acquittement de l'hôte A (Seq = 79) et le numéro d'acquittement au numéro de séquence de A tel que reçu par B, augmenté de la quantité de données en bytes reçue (Ack = 42 + 1 = 43),

c- L'hôte A confirme la réception du segment en envoyant un ACK à l'hôte B, avec comme numéro de séquence son nouveau numéro de séquence, à savoir 43 (Seq = 43) et comme numéro d'acquittement le numéro de séquence du segment précédemment reçu, augmenté de la quantité de données reçue (Ack = 79 + 1 = 80).

Les numéros de séquence sont des nombres entiers non signés sur 32 bits, qui reviennent à zéro après avoir atteint 2^32-1. Le choix du numéro de séquence initial est une des clefs de la robustesse et de la sécurité des connexions TCP.

Une amélioration de TCP, nommée acquittement sélectif (selective acknowledgement ou SACK), autorise le destinataire TCP à acquitter des blocs de données reçus dans le désordre.

5. Le rôle de la méthode sendUrgentData dans la classe “Socket” est d’envoyer un octet de données urgentes sur le socket. L'octet à envoyer est le plus bas huit bits de données du paramètre. L'octet est envoyé d'urgence après un précédent écrit à l'OutputStream prise et avant toute future écrit à l'OutputStream.

Socket exemple sendUrgentData classe. Cet exemple montre comment utiliser la méthode sendUrgentData. Socket class sendUrgentData exemple. Socket exemple sendUrgentData classe.

public void sendUrgentData (données int) throws IOException

Voici le code

import java.net.*;

9

Page 10: Projet Socket

public class SendUrgentData {

     public static void main ( String args []) throws Exception {

         Socket socket = new Socket () ;

         //Connects this socket to the server.          socket.connect ( new InetSocketAddress ( "192.168.10.211" , 8080 )) ;

         System.out.println ( "send Urgent Data ... " ) ;          socket. SendUrgentData (12) ;          socket. close () ;      } }

6. Le rôle de la méthode setTcpNoDelay dans la classe “Socket” permet d’envoyer des données aussitôt que possible  grâce a l’option TCP_NODELAY.

Cet exemple nous montre comment utiliser la méthode setTcpNoDelay. public void setTcpNoDelay (booléen on) jette Activer SocketException / TCP_NODELAY désactiver (activer / désactiver l'algorithme Nagle). Voici le code

import java.net.*;

public class SetTcpNoDelay {

     public static void main ( String args []) throws Exception {          Socket socket = new Socket () ;

         //Connects this socket to the server.          socket.connect ( new InetSocketAddress ( "192.168.10.222" , 8080 )) ;

         System.out.println ( "TCP_NODELAY " + socket.getTcpNoDelay ()) ;          socket.setTcpNoDelay ( true ) ;          System.out.println ( "TCP_NODELAY " +

10

Page 11: Projet Socket

socket.getTcpNoDelay ()) ;          socket. close () ;      } }

III DEUXIEME PARTIE

Dans cette partie nous allons réaliser un client et un serveur UDP DayTime (RFC 867).

Application client/serveur avec UDP

- Le programme serveur retourne la date locale du serveur à l’émetteur de tout datagramme qu’il reçoit .Nous avons implémentés ce programme en mettant en place une interface d’accueille sur la quelle est mis un champ de saisi et un bouton de lancement.

. Le champ « port du serveur » spécifie le port d’écoute du serveur

. Le bouton « Lancer le serveur » démarre le serveur

Une foi cliqué sur le bouton «Lancer le serveur » le programme nous redirige vers la nouvelle fenêtre ci-dessous du serveur. Cette dernière permet d’afficher les messages que le client envoit.

11

Page 12: Projet Socket

- Le programme client est implémenté avec une interface qui nous permet d’afficher l’heure exacte que le serveur a envoyé. Le programme client permet d’accepter la connexion pendante en spécifiant l’adresse et le port d’écoute du serveur. Nous avons implémentés ce programme en mettant en place une interface d’accueille sur la quelle est mis trois champs de saisi et un bouton de lancement.

. Le champ « identifiant de connexion » permet de donner un nom du client.

. Le champ « Adresse du serveur » spécifie l’adresse du serveur

. Le champ « port du serveur » spécifie le port d’écoute du coté serveur

. Le bouton « Demarrer le client » accepte la connexion pendante du coté serveur

La compilation de la classe contenant la fonction main du client renvoi la fenêtre suivante :

12

Page 13: Projet Socket

Une foi cliqué sur le bouton «Demarrer le client » le programme nous redirige vers la nouvelle fenêtre ci-dessous du client. Cette interface permet au client de saisir le texte qu’il envoit au serveur et de réceptionner en même temps la date venant du serveur.

13

Page 14: Projet Socket

14

Page 15: Projet Socket

IV. ConclusionLe projet nous a permis de comprendre le fonctionnement des sockets avec les protocoles TCP et UDP avec des interfaces graphiques. Certes nous avions rencontré des difficultés qui nous a permis finalement de faire beaucoup de recherches. Donc nous acquis des connaissances sur ce sujet.

15

Page 16: Projet Socket

16