Interaction avec le réseau 2024 - PDF

Summary

These notes cover the interaction with the network using Java. This document explains fundamental concepts and the basics of Java network development.

Full Transcript

Chapiter 6 : L'interaction avec le réseau Introduction Socket avec TCP 01 04 Les adresses internet L'utilisation du protocole UDP 02 05 Les sockets Les interfaces de connexions 03...

Chapiter 6 : L'interaction avec le réseau Introduction Socket avec TCP 01 04 Les adresses internet L'utilisation du protocole UDP 02 05 Les sockets Les interfaces de connexions 03 06 1 Introduction E2 ID SL Les échanges avec le réseau sont devenus omniprésents dans les applications et entre les applications. Ils permettent notamment : un accès à un serveur comme une base de données d'invoquer des services distants de développer des applications web d'échanger des données entres applications Une adresse internet permet d'identifier de façon unique une machine sur un réseau. t oin erP Ces fonctionnalités sont mises en oeuvre grâce à des API w Po of er ow eP Th Introduction E3 ID Le package java.net est une bibliothèque standard qui fournit des classes et des interfaces pour SL la gestion de la communication réseau. Ce package facilite la création de programmes capables de se connecter à des serveurs, d'envoyer et de recevoir des données, et de gérer divers types de protocoles réseau. Principales classes de java.net : La classe InetAddress La classe URL La classe URLConnection La classe URLEncoder : utilisée pour encoder des chaînes de caractères dans un format compatible avec les URL La classe HttpURLConnection : utilisée pour établir des connexions HTTP avec des t oin serveurs web, ce qui permet d’envoyer des requêtes HTTP (GET, POST, etc.) et de lire les erP réponses. w Po of er ow eP Th La classe InetAddress E4 ID SL Utilisée pour représenter une adresse IP, et elle offre des méthodes pour manipuler les adresses IP et les noms d'hôte. C'est une classe essentielle pour toute application Java nécessitant des informations sur les machines du réseau, telles que l'adresse IP ou le nom d'hôte d'un serveur. La classe InetAddress est principalement utilisée pour : Résoudre les adresses IP à partir de noms de domaine. Obtenir l'adresse IP de la machine locale. Vérifier la connectivité réseau avec une adresse donnée. Principales Méthodes de InetAddress : ❖ Méthode statique getLocalHost() : Retourne un objet InetAddress représentant l'adresse IP de la t machine locale. oin erP ❖ getHostName() : récupère le nom d'hôte associé à l’adresse IP. Si InetAddress a été initialisé avec w Po une adresse IP, il essaiera de résoudre le nom d'hôte. of ❖ getHostAddress() : récupère l'adresse sous forme pointée. Retourne l'adresse IP sous forme de er ow chaîne (par exemple, "192.168.1.1"). eP Th La classe InetAddress E5 ID Méthode SL Rôle Retourne un objet InetAddress correspondant au nom d'hôte InetAddress getByName(String) spécifié (par exemple, "www.example.com") ou à une adresse IP. Cette méthode effectue une recherche DNS si nécessaire. InetAddress[] Renvoie un tableau des adresses internet associées au nom getAllByName(String) d'hôte fourni en paramètre byte[] getAddress() Renvoie un tableau contenant les 4 octets de l'adresse internet Renvoie l'adresse internet sous la forme d'une chaîne de String getHostAddress() caractères t oin erP w Vérifie si une adresse est accessible dans un certain délai (en isReachable(int timeout) Po millisecondes).Effectue une opération de type "ping". of er ow eP Th La classe InetAddress E6 ID SL Utilisation de la Classe InetAddress pour Représenter une Adresse IP La classe InetAddress est utilisée pour représenter une adresse IP. Elle fournit des méthodes pour obtenir et manipuler des adresses IP. import java.net.InetAddress; public class InetAddressExample { public static void main(String[] args) { try { // Déclarer et obtenir l'adresse IP d'un hôte InetAddress address = InetAddress.getByName("www.uca.ma"); // Afficher l'adresse IP System.out.println("Adresse IP : " + address.getHostAddress()); t oin } catch (Exception e) { e.printStackTrace(); } erP } } w Po of er ow eP Th E7 La classe InetAddress ID SL import java.net.InetAddress; import java.net.UnknownHostException; public class TestNet1 { public static void main(String[] args) { try { InetAddress adrLocale = InetAddress.getLocalHost(); System.out.println("Adresse locale = "+adrLocale.getHostAddress()); InetAddress adrServeur = InetAddress.getByName("java.sun.com"); System.out.println("Adresse Sun = "+adrServeur.getHostAddress()); InetAddress[] adrServeurs = InetAddress.getAllByName("www.microsoft.com"); System.out.println("Adresses Microsoft : "); for (int i = 0; i < adrServeurs.length; i++) { System.out.println(" "+adrServeurs[i].getHostAddress()); t } oin } catch (UnknownHostException e) { erP e.printStackTrace(); w Po } } of } er ow Executer le fichier TestNet1.java et eP InetAddressExample.java Th E8 La classe URL ID SL Représente une URL (Uniform Resource Locator) qui peut pointer vers des ressources sur le web, telles que des fichiers, des pages web, des API, etc. Utilisation : Créer des objets qui représentent une URL et accéder aux composants de celle-ci, comme le protocole, l'hôte, le port, etc. Méthodes clés : URL(String spec): Construit une URL à partir d'une chaîne de caractères. openConnection(): Ouvre une connexion à l'URL, renvoyant un objet URLConnection. Exemple d'utilisation : t oin URL url = new URL("https://www.example.com"); erP URLConnection connection = url.openConnection(); w Po of er ow eP Th La classe URI E9 ID SL Utilisée pour représenter et manipuler des URI (Uniform Resource Identifier), une norme qui englobe les URL et les URN. Une URI est une chaîne de caractères qui identifie une ressource de manière uniforme. Contrairement à URL, la classe URI ne permet pas directement d’établir une connexion réseau. Cependant, elle est extrêmement utile pour analyser, manipuler et valider les URI. Utilisation : Créer des objets qui représentent une URI et accéder aux composants de celle-ci, comme le protocole, l'hôte, le port, etc. openConnection() : Cette méthode statique retourne une instance de URLConnection pour la ressource spécifiée par l'URL. t oin erP w URI uri = new URI("https://www.example.com"); Po of er ow eP Executer le fichier URLExample.java Th 0 E1 La classe URLConnection ID SL Représente une connexion à une ressource indiquée par une URL, et utilisée pour lire des données depuis un serveur web ou écrire des données vers celui-ci. Elle permet de configurer des en-têtes de requête, d'obtenir des flux d'entrée et de sortie, et de gérer les délais de connexion. Méthodes clés : getInputStream() : Cette méthode retourne un flux d'entrée pour lire les données de la ressource distante. InputStream inputStream = connection.getInputStream(); getOutputStream() : Cette méthode retourne un flux de sortie pour écrire des données vers la ressource distante. OutputStream outputStream = connection.getOutputStream(); setRequestProperty(String key, String value) : Cette méthode permet de définir des t propriétés de requête telles que les en-têtes HTTP. oin erP connection.setRequestProperty("User-Agent", "Mozilla/5.0"); w Po connect() : Cette méthode établit la connexion à la ressource. of connection.connect(); er ow eP Executer le fichier TestURLConnection.java Th 1 Les sockets E1 ID SL Java fournit plusieurs classes et interfaces destinées à faciliter l'utilisation du réseau par programmation en reposant sur les sockets. Les sockets sont des points d’entrée de communication bidirectionnelle utilisés pour l'échange de données entre deux programmes sur un réseau. Un socket est un mécanisme qui permet à des applications sur des périphériques distincts de communiquer en utilisant un réseau, qu'il s'agisse d'un réseau local (LAN) ou d'un réseau étendu (WAN) comme Internet. Un socket permet de créer des applications en architecture client-serveur qui peuvent échanger des données en temps réel. Il existe deux types principaux de sockets : t oin 1. Socket côté serveur (Server Socket) : Écoute et attend les connexions entrantes des clients. Il erP w se met en attente d'une demande de connexion. Po 2. Socket côté client (Client Socket) : Initie la connexion vers un serveur. Il spécifie l'adresse IP et of er ow le port du serveur auquel il souhaite se connecter. eP Th 2 Les sockets E1 ID SL Le système des sockets est le moyen de communication interprocessus développé pour l'Unix Berkeley (BSD). Il est actuellement implémenté sur tous les systèmes d'exploitation utilisant TCP/IP. Socket TCP : Utilisé pour des connexions fiables et orientées connexion (par exemple, HTTP). Les données sont envoyées en flux, garantissant qu'elles arrivent dans le bon ordre et sans perte. Socket UDP : Utilisé pour des connexions rapides mais non fiables, sans vérification de la réception. Il envoie des "datagrammes", qui peuvent être perdus ou livrés dans le désordre (par exemple, pour des applications de diffusion en direct). t oin Les classes du package java.net principales sont : erP Socket : pour créer une connexion client vers un serveur via TCP. w Po ServerSocket : pour mettre en place un serveur TCP qui écoute les connexions entrantes. of er DatagramSocket et DatagramPacket : envoyer et recevoir des paquets de données via UDP. ow eP Th Modèles de connexions réseau TCP en Java 3 E1 ID SL Dans Java, les sockets TCP/IP utiles au développement réseau sont implantées au travers de classes du package java.net. Ci-après le Diagramme d’utilisation: t oin erP w Po of er ow eP Th Modèles de connexions réseau TCP en Java 4 E1 ID SL Le modèle client-serveur est fondamental dans la programmation réseau. Il se compose d'un serveur qui fournit des services et d'un ou plusieurs clients qui demandent ces services. La communication est initiée par le client et le serveur répond à ses demandes. Pour créer une connexion avec des sockets en Java, voici les étapes principales à suivre : Serveur : Crée un ServerSocket pour écouter sur un port spécifique qu’un client se connecte, puis établit une connexion pour lire et écrire des données. Client : Crée un Socket pour se connecter au serveur et envoie/reçoit des données. La Classe Socket possède 2 méthodes : getOutputStream() et getInputStream() qui vont vous permettre de manipuler les données comme pour un fichier. t oin erP w Du point vue bas-niveau, un socket se comporte de la même manière qu’un fichier. Une fois Po of une connexion établie, la gestion des sockets est similaire à la gestion des fichiers. er ow eP Th Modèles de connexions réseau en TCP en 5 Java E1 ID SL t oin erP w Po of er ow eP Th 6 Communication Client-Serveur avec TCP E1 ID SL CLIENT SERVER ServerSocket creation Socket creation accept() Communication Socket getInputStream() getOutputStream() getInputStream() getOutputStream() t oin read(), readLine(), write(), println() , read(), readLine(), write(), println() , erP flush() flush() w Po of er close() close() ow Program ends eP Th Les exceptions liées au réseau Le package java.net définit plusieurs exceptions : Exception Rôle / Définition BindException Connection au port local impossible : le port est peut être ocupé ConnectException Connection à une socket impossible : aucun serveur n'écoute sur le port précisé MalformedURLException L'URL n'est pas valide NoRouteToHostException Connection à l'hôte impossible : un firewall empêche la connexion ProtocolException Erreur survenue au niveau du protocole (TCP par exemple) SocketException Une erreur est survenue au niveau du protocle sous-jacent SocketTimeoutException Délai d'attente pour la réception ou l'émission des données écoulé UnknownHostException L'adresse IP de l'hôte n'a pas pu être trouvée Une erreur est survenue au niveau de la couche service : par exemple, le type MIME retourné est UnknownServiceException incorrect ou l'application tente d'écrire sur une connexion en lecture seule URISyntaxException La syntaxe de l'URI utilisée est invalide 17 8 La classe ServerSocket E1 ID SL Création d'un Socket Côté Serveur La notion de flux est très générale puisqu’elle désigne n’importe quel "canal" suceptible de transmettre de l’information sous forme d’une suite d’octets. Cette notion s’applique aux connexions TCP/IP entre ordinateurs utilisant le protocole telnet. Dans ce cas, un des ordinateurs est considéré comme serveur et le service offert est caractérisé par : l’adresse IP de l’ordinateur, par exemple : 127.0.0.1; t le numéro de port sur lequel on a choisi d’ouvrir le service. oin erP w Po of er ow eP Th 9 E1 La classe ServerSocket ID SL Un serveur doit écouter sur un port spécifique et attendre que les clients se connectent. Pour cela, un socket côté serveur est créé et lié à un port. Le serveur accepte ensuite les connexions entrantes et crée un nouveau socket pour chaque client connecté. import java.net.ServerSocket; import java.net.Socket; La classe ServerSocket représente un public class Serveur { socket côté serveur. public static void main(String[] args) { Elle est utilisée pour écouter les connexions try { // Spécifie le port sur lequel le serveur écoute entrantes des clients. int serverPort = 12345; On spécifie le port sur lequel le serveur doit // Crée un socket côté serveur lié au port spécifié écouter lors de la création du socket. t oin ServerSocket serverSocket = new ServerSocket(serverPort); erP // Le serveur attend les connexions entrantes w Po Socket clientSocket = serverSocket.accept(); of // Le reste du code pour la communication avec le client } er ow catch (Exception e) { e.printStackTrace(); eP }}} Th 0 E2 La classe ServerSocket ID SL La classe ServerSocket est utilisée côté serveur : elle attend simplement les appels du ou des clients. C'est un objet du type Socket qui prend en charge la transmission des données. Un objet de cette classe est associé à un port sur lequel il va attendre les connexions d'un client. La classe ServerSocket possède plusieurs constructeurs. Tous ces constructeurs peuvent lever une exception de type IOException : Constructeur Rôle ServerSocket() Constructeur par défaut t oin erP ServerSocket(int) Créer une socket sur le port fourni en paramètre w Po ServerSocket(int, int) Créer une socket sur le port et avec la taille maximale de la file fournis en paramètres of er ow eP Th 1 La classe ServerSocket E2 ID SL La classe ServerSocket possède plusieurs méthodes : Méthode Rôle Socket accept() Attendre une nouvelle connexion void close() Fermer la socket Si un client tente de communiquer avec le serveur, la méthode accept() renvoie une socket qui encapsule la communication avec ce client. Le mise en œuvre de la classe ServerSocket suit toujours la même logique : 1. Créer une instance de la classe ServerSocket en précisant le port en paramètre t oin 2. Définir une boucle sans fin contenant les actions ci-dessous erP w a) appelle de la méthode accept() qui renvoie une socket lors d'une nouvelle connexion Po of b) obtenir un flux en entrée et en sortie à partir de la socket er ow c) écrire les traitements à réaliser eP Th 2 La classe ServerSocket E2 ID SL Dans ce modèle, le fonctionnement est le suivant : Le serveur enregistre son service sous un numéro de port. Puis, le serveur se met en attente sur ce service par la méthode accept() de son instance de ServerSocket. Le client peut alors établir une connexion avec le serveur en demandant la création d’une Socket à destination du serveur pour le port sur lequel le service a été enregistré. Le serveur sort de son accept() et récupère une Socket en communication avec le Client. Ils peuvent alors utiliser des InputStream et OutputStream pour échanger des données. t oin erP Lancer le fichier SimpleServer.java du repertoire Exemple1 w Po of Assurez-vous d'exécuter le serveur avant le client, car le client er ow tentera de se connecter au serveur en cours d'exécution. eP Th SL ID E2 3 La classe ServerSocket Th eP ow er of Po werP oin t 4 La classe Socket E2 ID SL Création d'un Socket Côté Client Pour qu'un client communique avec un serveur, il doit créer un socket. Un socket côté client est instancié avec l'adresse IP et le port du serveur auquel il souhaite se connecter. Le socket côté client est responsable de l'initiation de la connexion. import java.net.Socket; public class Client { La classe Socket représente un socket côté public static void main(String[] args) { client. try { // Spécifie l'adresse IP et le port du serveur Elle est utilisée pour initier une connexion String serverAddress = "127.0.0.1"; avec un serveur distant. int serverPort = 12345; On spécifie l'adresse IP et le port du serveur t oin // Crée un socket côté client et tente de se connecter au serveur lors de la création du socket. erP Socket clientSocket = new Socket(serverAddress, serverPort); w Po // Le reste du code pour la communication avec le serveur of } catch (Exception e) { er ow e.printStackTrace(); } } } eP Th 5 Socket avec TCP E2 ID SL Cette classe encapsule la connexion à une machine distante par le réseau. Elle gère la connexion, l'envoi de données, la réception de données et la déconnexion. La classe Socket possède plusieurs constructeurs dont les principaux sont : Constructeur Rôle Socket() Constructeur par défaut Créer une socket sur la machine dont le nom et le port sont fournis en Socket(String, int) t oin paramètres erP Créer une socket sur la machine dont l'adresse IP et le port sont fournis en w Socket(InetAddress, int) Po paramètres of er ow eP Th 6 Socket avec TCP E2 ID SL La classe Socket possède de nombreuses méthodes dont les principales sont : Méthode Rôle InetAddress getInetAddress() Renvoie l'adresse I.P. à laquelle la socket est connectée void close() Fermer la socket InputStream getInputStream() Renvoie un flux en entrée pour recevoir les données de la socket OutputStream getOutputStream() Renvoie un flux en sortie pour émettre les données de la socket int getPort() Renvoie le port utilisé par la socket t oin erP w Po of er ow eP Th 7 Socket avec TCP E2 ID SL Le mise en oeuvre de la classe Socket suit toujours la même logique : 1. créer une instance de la classe Socket en précisant la machine et le port en paramètres 2. obtenir un flux en entrée et en sortie 3. écrire les traitements à réaliser Voir le fichier SimpleClient.java t oin erP w Po of er ow eP Th 8 Socket avec TCP E2 ID SL t oin erP w Po of er Serveur Client ow eP Th 9 Socket avec TCP E2 ID Explication du code SL Voyons comment procéder, en distinguant le code utilisé par le serveur de celui utilisé par les "clients". Côté serveur Pour que le serveur soit prêt à recevoir des informations, on devra créer un objet de type ServerSocket, associé au numéro de port choisi (ici, port) : ServerSocket serverSocket = new ServerSocket(port)); On obtiendra ensuite une "socket" associée à cet objet, en utilisant la méthode accept : Socket clientSocket = serverSocket.accept(); t oin Puis la méthode getInputStream de la classe Socket permettra d’obtenir un flux de type erP InputStream associé à cette socket : w Po clientSocket.getOutputStream() of er ow eP Th 0 Socket avec TCP E3 ID Explication du code SL Côté client Pour pouvoir communiquer avec le serveur, le client créera un objet de type Socket, associé à la fois à l’adresse IP du serveur (hote) et au numéro de port du service (port) : Socket socket = new Socket(serverAddress, port); Pour configure configurer la réception des données provenant de l'autre côté de la connexion : BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); Configurer l’envoi des données en texte vers l'autre côté de la connexion, en activant l'envoi immédiat de chaque ligne écrite. PrintWriter out = new PrintWriter(socket.getOutputStream(), true); Configure la lecture des données que l'utilisateur tape au clavier, permettant de traiter des lignes t oin complètes de texte. erP BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)); w Po of er ow eP Th SL ID Serveur E3 1 Client Th eP ow er of Po werP oin t 2 La classe ServerSocket E3 ID SL L'inconvénient de ce modèle est qu'il ne peut traiter qu'une connexion à la fois. Pour pouvoir traiter plusieurs connexions simultanément, il faut créer un nouveau thread contenant les traitements à réaliser sur la socket. Consulter le fichier TestServeurThreadTCP.java t oin erP w Po of er ow eP Th Client 2 Client 1 33 L'utilisation du protocole UDP La classe DatagramSocket fait partie du package java.net et est utilisée pour la communication à travers le protocole User Datagram Protocol (UDP). UDP (User Datagram Protocol) est un protocole basé sur IP qui permet une connexion de type point à point ou de type multipoint. C'est un protocole qui ne garantit pas que les données arriveront dans l'ordre d'émission. En contre-partie, ce protocole offre de bonnes performances car il est très rapide mais à réserver à des tâches peu importantes. Pour assurer les échanges, UDP utilise la notion de port, ce qui permet à plusieurs applications d'utiliser UDP sans que les échanges interfèrent les uns avec les autres. Cette notion est similaire à la notion de port utilisée par TCP. L'échange de données avec UDP se fait avec deux sockets, l'une sur le serveur, l'autre sur le client. Chaque socket est caractérisée par une adresse internet et un port. Pour utiliser le protocole UDP, Java définit deux classes DatagramSocket et DatagramPacket. 34 L'utilisation du protocole UDP 35 La classe DatagramSocket Cette classe crée un Socket qui utilise le protocole UDP (Unreliable Datagram Protocol) pour émettre ou recevoir des données. Cette classe possède plusieurs constructeurs : Constructeur Rôle Créer une socket attachée à toutes les adresses IP de la machine et à un DatagramSocket() des ports libres sur la machine Créer une socket attachée à toutes les adresses IP de la machine et au DatagramSocket(int) port précisé en paramètre DatagramSocket(int, Créer une socket attachée à l'adresse IP et au port précisés en paramètres InetAddress) Tous les constructeurs peuvent lever une exception de type SocketException : en particulier, si le port précisé est déjà utilisé lors de l'instanciation de l'objet DatagramSocket, une exception de type BindException est levée. Cette exception hérite de SocketException. 36 La classe DatagramSocket La classe DatagramSocket définit plusieurs méthodes : Méthode Rôle close() Fermer la socket et ainsi libérer le port receive(DatagramPacket) Recevoir des données send(DatagramPacket) Envoyer des données int getPort() Renvoyer le port associé à la socket void setSoTimeout(int) Préciser un timeout d'attente pour la réception d'un message. Par défaut, un objet DatagramSocket ne possède pas de timeout lors de l'utilisation de la méthode receive(). La méthode bloque donc l'exécution de l'application jusqu'à la réception d'un packet de données. La méthode setSoTimeout() permet de préciser un timeout en millisecondes. Une fois ce délai écoulé sans réception d'un paquet de données, la méthode lève une exception du type SocketTimeoutException. 37 La classe DatagramPacket Cette classe encapsule une adresse internet, un port et les données qui sont échangées grâce à un objet de type DatagramSocket. Elle possède plusieurs constructeurs pour encapsuler des paquets émis ou reçus. Constructeur Rôle DatagramPacket(byte tampon[], int taille) Encapsule des paquets en réception dans un tampon DatagramPacket(byte port[], int taille, InetAddress Encapsule des paquets en émission à destination d'une adresse, int port) machine Cette classe propose plusieurs méthodes pour obtenir ou mettre à jour les informations sur le paquet encapsulé. 38 La classe DatagramPacket Le format des données échangées est un tableau d'octets, il faut donc correctement initialiser la propriété length qui représente la taille du tableau pour un paquet émis et utiliser cette propriété pour lire les données dans un paquet reçu. Méthode Rôle InetAddress getAddress () Renvoyer l'adresse du serveur byte[] getData() Renvoyer les données contenues dans le paquet int getPort () Renvoyer le port int getLength () Renvoyer la taille des données contenues dans le paquet setData(byte[]) Mettre à jour les données contenues dans le paquet 39 Exemple de serveur et client UDP Dans cet exemple : un serveur attend un nom d'utilisateur envoyé sur le port 9632. Dès qu'un message lui est envoyé, il renvoie à son expéditeur "bonjour" suivi du nom reçu du client, de son IP et du numéro du port. import java.net.*; public class TestServeurUDP { final static int port = 9632; final static int taille = 1024; static byte buffer[] = new byte[taille]; public static void main(String argv[]) throws Exception { DatagramSocket socket = new DatagramSocket(port); String donnees , message ; int taille = 0; System.out.println("Lancement du serveur"); while (true) { DatagramPacket paquet = new DatagramPacket(buffer, buffer.length); socket.receive(paquet); System.out.println("\n"+paquet.getAddress()); taille = paquet.getLength(); donnees = new String(paquet.getData(),0, taille); System.out.println("Donnees reçues = "+donnees); message = "Bonjour "+donnees; System.out.println("Donnees envoyees = "+message); DatagramPacket envoi = new DatagramPacket(message.getBytes(), message.length(), paquet.getAddress(), paquet.getPort()); socket.send(envoi); } } } 40 Exemple de serveur et client UDP import java.net.*; import java.util.Scanner; public class TestClientUDP { final static int port = 9632; final static int taille = 1024; static byte buffer[] = new byte[taille]; public static void main(String argv[]) throws Exception { Scanner sc = new Scanner(System.in); try { System.out.print("Hostname : "); InetAddress serveur = InetAddress.getByName(sc.next()); System.out.print("Name : "); String msg = sc.next(); int length = msg.length(); byte buffer[] = msg.getBytes(); DatagramSocket socket = new DatagramSocket(); DatagramPacket donneesEmises = new DatagramPacket(buffer, length, serveur, port); DatagramPacket donneesRecues = new DatagramPacket(new byte[taille], taille); socket.setSoTimeout(30000); socket.send(donneesEmises); socket.receive(donneesRecues); System.out.println("Message : " + new String(donneesRecues.getData(), 0, donneesRecues.getLength())); System.out.println("de : " + donneesRecues.getAddress() + ":" + donneesRecues.getPort()); } catch (SocketTimeoutException ste) { System.out.println("Le delai pour la reponse a expire"); } catch (Exception e) { e.printStackTrace(); } } } 41 Exemple de serveur et client UDP Serveur Client 42 Exemple illustration : Application de Chat 3 E4 en Réseau avec Partage de Fichiers ID SL Dans cet exercice, vous allez créer une application de chat permettant la communication entre deux clients situés sur des machines distinctes mais reliées par un réseau local. 1. Communication en Temps Réel Chaque client peut envoyer et recevoir des messages textuels de l'autre client, comme dans un système de chat classique. Les messages doivent s'afficher en temps réel sur l'interface de chaque utilisateur. 2. Partage de Fichiers : Les utilisateurs doivent pouvoir envoyer des fichiers via l’application. Lorsqu’un utilisateur envoie un fichier, l’autre utilisateur doit recevoir une notification et pouvoir accepter ou refuser le téléchargement. t oin erP Le transfert du fichier se fait via une connexion TCP sécurisée. w Po of er ow eP Th Exemple illustration 44 SL ID E4 5 Exemple illustration Th eP ow er of Po werP oin t

Use Quizgecko on...
Browser
Browser