Vous êtes sur la page 1sur 16

DEPARTEMENT DE MATHEMATIQUE ET INFORMATIQUE SECTION INFORMATIQUE PRESENTER PAR : PAPE DIOP IBRAHIMA DANFAKHA BAYE AMATH AWA THIAM

16 juin 2011

PROJET DE PROGRAMMATION DE SOCKETS EN JAVA

Section informatique

Master I

I. II.

III. IV.

Introduction Premire partie A. Application client/serveur avec TCP B. Rponse des questions Deuxime partie Application client/serveur avec UDP Conclusion

I INTRODUCTION Le but de ce projet est de mettre en uvre une application grant une architecture de messagerie instantane 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 rpondre aux diffrentes questions et enfin de prsenter l application client/serveur via le protocole UDP. II. Premire partie
2

Le fonc onne ent de l application se a d c it dans les diff entes ta pes s ivantes : -Le programme serve r ouvre un socket TCP d coute et se met en attente d un client. Nous avons implments ce programme en mettant en place une interface d accueille sur la quelle est mis deux c amps de saisi et un bouton de lancement. Le c amp identifiant de connexion permet de donner un nom au serveur. Le c amp port du serveur spcifie le port d coute du serveur Le bouton Demarrer le serveur dmarre le serveur
        

Une foi cliqu sur le bouton Demarrer le serveur le programme nous redirige vers la nouvelle fentre ci-dessous du serveur. Cette dernire permet d affic er les messages que le client envoit.


A Appli tion li nt/s


-Le programme client permet d accepter la connexion pendante en spcifiant l adresse et le port d coute du serveur. Nous avons implments ce programme en mettant en place une interface d accueille sur la quelle est mis trois c amps de saisi et un bouton de lancement. Le c amp identifiant de connexion permet de donner un nom du client. Le c amp Adresse du serveur spcifie l adresse du serveur Le c amp port du serveur spcifie 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 fentre suivante :

Une foi cliqu sur le bouton Demarrer le client le programme nous redirige vers les nouvelles fentres ci-dessous du client et du serveur. Cette interface permet au client de saisir le texte qu il envoit au serveur et de rceptionner en mme temps la rponse du serveur.

B . Rpons s aux qu stions : 1. Pour grer la commu icatio avec u seul clie t, u ob et de type ServerSocket et u ob et de type Socket so t ncessaire au niveau du serveur.
 

Le rle de l jet ServerS cket est de crer un socket d coute sur un port (Les demandes de connexion inities 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 mthode accept() pour attendre une connexion client. La mthode accept() loque l excution jusqu ce qu une connexion avec un client soit opre. Lorsqu une connexion est tablie, une nouvelle instance Socket est retourne. L objet de t pe Socket permet de retourner une rponse du serveur au client ou de recevoir les donnes d un client (cette mthode 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 t pe Socket appartient la classe Socket : permet de traiter les donnes 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 mme 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 mthode close () du Socket. Les deux messages sont le message de dconnexion de lexpditeur et lacquittement du destinataire. Les flags sont les IOException qui grent les exceptions gnres sil ya erreur de fermeture. 4. Lenvoie dun message dun client vers le serveur nest pas immdiat. Par exemple si on dclare un temporisateur (long tp1=System.nanoTime ();) juste aprs lenvoie du client et on larrte juste aprs la rception on aura la dure de transmission des donnes . Ce non immdiatet s explique par le fait que : -grce aux numros de squence et d'acquittement, les systmes terminaux peuvent remettre les donnes reues dans l'ordre l'application destinataire. -les numros de squence sont utiliss pour dcompter les donnes dans le flux d'octets. On trouve toujours deux de ces nombres dans chaque segment TCP, qui sont le numro de squence et le numro d'acquittement. Le numro de squence reprsente le propre numro de squence de l'metteur TCP, tandis que le numro d'acquittement reprsente le numro de squence du destinataire.
8

Afin d'assurer la fiabilit de TCP, le destinataire doit acquitter les segments reus en indiquant qu'il a reu toutes les donnes du flux d'octets jusqu' un certain numro de squence qui indique le premier octet des donnes.

Par exemple, le scnario d'un change de segments par Telnet est dcrit par les tapes suivantes :
a- L'hte A envoie un segment l'hte B contenant un octet de donnes, un numro de squence gal 42 (Seq = 42) et un numro d'acquittement gal 79 (Ack = 79), b- L'hte B envoie un segment ACK l'hte A. Le numro de squence de ce segment correspond au numro d'acquittement de l'hte A (Seq = 79) et le numro d'acquittement au numro de squence de A tel que reu par B, augment de la quantit de donnes en bytes reue (Ack = 42 + 1 = 43), c- L'hte A confirme la rception du segment en envoyant un ACK l'hte B, avec comme numro de squence son nouveau numro de squence, savoir 43 (Seq = 43) et comme numro d'acquittement le numro de squence du segment prcdemment reu, augment de la quantit de donnes reue (Ack = 79 + 1 = 80).

Les numros de squence sont des nombres enti ers non signs sur 32 bits, qui reviennent zro aprs avoir atteint 2^32 -1. Le choix du numro de squence initial est une des clefs de la robustesse et de la scurit des connexions TCP. Une amlioration de TCP, nomme acquittement slectif ( selective acknowledgement ou SACK), autorise le destinataire TCP acquitter des blocs de donnes reus dans le dsordre.
5. Le rle de la mthode sendUrgentData dans la classe Socket est de nvoyer un octet de donnes urgentes sur le socket. L'octet envoyer est le plus bas huit bits de donnes du paramtre. L'octet est envoy d'urgence aprs un prcdent crit l'OutputStream prise et avant toute future crit l'OutputStream.

Socket exemple sendUrgentData classe. Cet exemple montre comment utiliser la mthode sendUrgentData. Socket class sendUrgentData exemple. Socket exemple sendUrgentData classe. public void sendUrgentData (donnes int) throws IOException Voici le code import java.net.*; public class SendUrgentData {
9

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 rle de la mthode setTcpNoDelay dans la classe Socket permet denvoyer des donnes aussitt que possible grce a loption TCP_NODELAY.

Cet exemple nous montre comment utiliser la mthode setTcpNoDelay. public void setTcpNoDelay (boolen on) jette Activer SocketException / TCP_NODELAY dsactiver (activer / dsactiver 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 " + socket.getTcpNoDelay ()) ;
10

socket. close () ; } } III DEUXIEME PARTIE Dans cette partie nous allons raliser un client et un serveur UDP DayTi e (RFC 867 .
   

Appli ation cli nt/s


 

u avec UDP

- Le programme serveur retourne la date locale du serveur l metteur de tout datagramme qu il reoit .Nous avons implments ce programme en mettant en place une interface d accueille sur la quelle est mis un c amp de saisi et un bouton de lancement. . Le c amp port du serveur spcifie le port d coute du serveur . Le bouton Lancer le serveur dmarre le serveur
! !

Une foi cliqu sur le bouton Lancer le serveur le programme nous redirige vers la nouvelle fentre ci-dessous du serveur. Cette dernire permet d affic er les messages que le client envoit.
!

11

- Le programme client est implment avec une interface qui nous permet d affic er l heure exacte que le serveur a envoy. Le programme client permet d accepter la connexion pendante en spcifiant l adresse et le port d coute du serveur. Nous avons implments 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 spcifie l adresse du serveur . Le champ port du serveur spcifie 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 fentre suivante :
"

12

Une foi cliqu sur le bouton Demarrer le client le programme nous redirige vers la nouvelle fentre ci-dessous du client. Cette interface permet au client de saisir le texte qu il envoit au serveur et de rceptionner en mme temps la date venant du serveur.

13

14

IV. Conclusion Le 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 difficults qui nous a permis finalement de faire beaucoup de recherches. Donc nous acquis des connaissances sur ce sujet.

15

16