Exercices TP Communication par Sockets -Développement d'applications réparties

Ce document intitulé "TP N°3 : La Communication par Sockets" est destiné aux étudiants de Master 1 du Département du IFA à la Faculté des nouvelles technologies de l'Université Constantine 2 –Abdelhamid Mehri. Il vise à comprendre le fonctionnement des Sockets en mode connecté (TCP) et l'utilisation des classes InetAddress, ServerSocket et Socket.

Il couvre les notions suivantes:

  • Les bases de la communication entre humains et informatiques.
  • Les couches du modèle OSI et du modèle TCP/IP.
  • Les manipulations sur les adresses IP et les interfaces réseau en Java.
  • Les types de Sockets et les protocoles de communication.
  • Des exercices pratiques de client-serveur en Java.

Exercices TP Communication par Sockets -Développement d'applications réparties

Télécharger PDF

Université Constantine 2 –Abdelhamid Mehri

Faculté des nouvelles technologies

Département du IFA / Master 1

TP N°3 : La Communication par Sockets

Objectif : L’objectif de ce troisième TP est de comprendre le fonctionnement global des Sockets en mode connecté (TCP) et d’appréhender l’utilisation des classes suivantes : InetAddress, ServerSocket et Socket.

M Lounes Bessalah

Matière D.A.R.E 2020-2021

La communication ?

Humains VS Informatiques

  • Connaître le correspondant (Nom, status..).
  • Avoir un Langage commun(fr,ar,en…).
  • Avoir un sujet commun de conversation(travail,vie..).
  • Être de près ou de loin au même endroit.
  • Adresse (logique/physique).
  • Protocoles de communications (language de com.).
  • Port (services, programmes, applications….).
  • Connecter a un réseau commun.

en Java?

Couche 1 (physique) :

du matériel de support de transmission (câbles etc.) ;

Couche 2 (liaison de données) :

de quoi connecter les machines entres elles (switch, carte réseau etc,) ;

Couche 3 (réseau) :

de quoi connecter les réseaux entre eux ;

Couche 4 (transport) :

de quoi définir les identifiant de ports et de protocole ;

Couche 5 (session) :

aucune importance, existence théorique ;

Couche 6 (présentation) :

aucune importance, existence théorique ;

Couche 7 (application) :

l'application initiatrice de la communication (navigateur, client mail etc,).

Couche 1 (hôte réseau) :

permet a un hôte d’envoyer des paquets IP sur le réseau.

Couche 2 (INTERNET) :

Son rôle est de permettre l’injection de paquets dans n’importe quel réseau et l’acheminement des ces paquets indépendamment les uns des autres jusqu’à destination.

Couche 3 (transport) :

le protocole TCP (Transmission Control Protocol) et le protocole UDP (User Datagram Protocol).

Couche 4 (Application) :

les protocoles de haut niveau;

Modèle OSI 7C Modèle TCP/IP

Manipulation sur java network

Manipulation sur les adresses IP: Class java.net.InetAddress

Liste de toutes les interfaces réseau : Class java.net.NetworkInterface;

Liste Ip adresses « Internet »:

URL java.net.URL: P.Com. Addresse Serveur. Arborescences

JAVA Sockets

lorsque vous recherchez une page web sur Internet, avant que celle-ci ne s'affiche, une multitude de paquets sont échangés, car les données sont divisées en plusieurs morceaux et réassemblés à l'arrivée pour être utilisées :

  • Les sockets vous permettent de ne pas avoir à faire ce travail de découpage vous-mêmes,
  • Elles vous permettent de traiter n'importe quelle communication réseau comme si vous lisiez ou écriviez dans un fichier. En fait, elles vous permettent de :
  • Vous connecter à une machine distante ;
  • Recevoir et envoyer des données ;
  • Fermer une connexion établie ;
  • Attendre une connexion de l'extérieur ;
  • Écouter les communications entrantes ;
  • Utiliser un port.

Types de Sockets |Protocoles

  • Communication par TCP ->(protocoles TCP)
  • Socket Stream->java.net.ServerSocket; et java.net.Socket;

Exercice N°1 :CLIENT SERVER.

Prérequis

Niveau 1

Coté client :

  • Classes java : Client
  • Methodes java : public static void main(String args[]) throws Exception{…}
  • Variables utilisées java : new Socket(?,?); new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())) new PrintWriter(??,true);
  • String MessageClient = "je suis le client N° " + identifiantClient +" : Ma requete est : \nEND";
  • writer.println(MessageClient);
  • J’écoute en boucle + String line = reader.readLine(); si line ==fin ou vide je sort sinon je lis

Coté Serveur :

  • Classes java : Serveur
  • Methodes java : public static void main(String args[]) throws Exception{…}
  • Variables utilisées java : new ServerSocket(?); Socket socket = serverSocket.accept();
  • Buffer pour lecture à l'inverse du buffer du client (voir client side) Un autre Buffer pour ecriture car le client attend une reponse (voir client side)
  • J’écoute en boucle + String line = reader.readLine(); si line ==fin ou vide je sort sinon je lis
  • response = "Réponse du serveur\nEND";
  • writer.println(response);

Coté Server et coté client

il faut toujours fermé les flux ,les sockets ,les connexions. reader.close(); writer.close(); socket.close();

Correction client

Niveau 1

Correction serveur

Niveau 1

Exercice N°2 :CLIENT SERVER.

Prérequis

Niveau 2

Coté client niveau 2 :

  • Classes java : Client + constructeur
  • Methodes java : public static void main(String args[]) throws Exception{ Client client = new Client();}
  • Variables utilisées java : private String serverName = "localhost"; private int serverPort = 8081; private Socket socket = null; private DataOutputStream dos = null; Scanner scan=new Scanner(System.in);
  • while (true) { try { System.out.print("Message to server : "); String messageToServer = scan.nextLine(); if(messageToServer.equals("exit")){ break; } dos.writeUTF(messageToServer); dos.flush(); } catch (IOException e) { break; } }

Coté Serveur niveau 2 :

  • Classes java : Serveur + constructeur
  • Methodes java : public static void main(String args[]) throws Exception{ Server server = new Server();}
  • Variables utilisées java : private int port = 8081; private Socket socket = null; private ServerSocket serverSocket = null; private BufferedInputStream bis = null; private DataInputStream dis = null; bis = new BufferedInputStream(socket.getInputStream()); dis = new DataInputStream(bis);
  • while (true) { try { String messageFromClient = dis.readUTF(); if (messageFromClient.equals("exit")) { break; } System.out.println("Client [" + socket.getRemoteSocketAddress() + "] : " + messageFromClient); } catch (IOException e) { break; } }

Résultats

  • Console serveur (en premier),
  • Console Client ou clients :

Exercice N°3 :CLIENT SERVER Salon de chat entre clients.

Niveau 3

Cotés serveur

  • socket = serverSocket.accept(); en boucle pour N client
  • Liste de sockets .
  • Reçois et retransmet

Exercice N°4 :CLIENT SERVER Salon de chat entre clients+ interface graphique

Niveau 4

Fin du troisième TP

FAQ

Qu'est-ce qu'un socket en Java?

Un socket en Java est une abstraction qui permet de communiquer avec d'autres machines sur un réseau. Il permet de recevoir et d'envoyer des données, de se connecter à une machine distante, et de gérer les connexions réseau.

Quelle est la différence entre TCP et UDP?

TCP (Transmission Control Protocol) est un protocole orienté connexion qui garantit la livraison des données dans l'ordre et sans erreur. UDP (User Datagram Protocol) est un protocole sans connexion qui ne garantit pas la livraison des données mais est plus rapide.

Comment fermer correctement une connexion socket en Java?

Pour fermer correctement une connexion socket en Java, il est important de fermer les flux de lecture et d'écriture, puis de fermer le socket lui-même. Cela se fait généralement en appelant les méthodes close() sur les objets de flux et de socket.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne