Sockets en java(Unix) – Rapport
Les sockets servent à com re deux hôtes appelés 4 OF Pas de constructeurs publics. D pour creer une InetAddress, il faut utiliser une des méthodes suivantes public static InetAddress getByName(String nom hote) public static InetAddress t] getAllByName(String nom_hote) public static InetAddress getLocalHost() LI public static InetAddress getByName (String nom_hote) Cette méthode utilise le DNS pour renvoyer une instance de la classe netAddress contenant l’adresse IP de la machine dont le nom est passe en paramètre En cas d’erreur, lève l’exception UnknownHostException
Exemple : InetAddress adr = InetAddress. getbyName(« www. site. com »); û public static InetAddress get3yName [] (String nom_hote) LI Renvoie toutes les adresses IP de la machine (dont le nom est passé en paramètre) 8 0 En cas d’erreur, lève l’exception UnknownHostException LI public static InetAddress getLocalHost () Renvoie une instance de la classe InetAddress Û contenant l’adresse IP de la machine locale Équivalent à : D getByName(null) , Û public String getHostName û Renvoie la chaine de car nant le nom de la serveur se met simplement à l’écoute d’un client, qu emande une connexion.
Il existe au moins deux grands modes de communication : LI par paquet (datagram) : dans ce mode on est pas connecté D en flux (stream) : dans ce mode on est connecté 11 2. 2 sockets TCP/UDP Dans le mode flux (Mode Connecté) les informations sont reçues dans l’ordre exact de leur émission il n’y a pas de perte . Ouverture d’une liaison, suite d’échanges, fermeture de la liaison. Le serveur préserve son état entre deux requêtes. Garanties de TCP : ordre, contrôle de flux, fiabilité. Adapté aux échanges ayant une certaine durée (plusieurs essages). Inconvénient : nécessite l’établissement d’une connexion et consomme donc des ressources pour sa gestion Dans le mode paquet (Mode non connecté) il n’existe pas d’ordre dans la délivrance des paquets un paquet posté en premier peut arriver en dernier il n’existe pas non plus de fiabilité un paquet envoyé peut être perdu Les requêtes successives sont indépendantes. Pas de préservation de l’état entre les requêtes. e client doit indiquer son adresse à chaque requête (pas de liaison permanente). – Pas de garanties particulières. – Adapté aux échanges br OF n 1 message). eux personnes de se parler. L’analogie avec le réseau téléphonique est excellente et nous allons futiliser au long de ce petit guide. 3. 1*3 Installation du téléphone Pour recevoir des appels téléphoniques, il nous faut installer le téléphone. De même nous devons créer un socket qui attendra des connexions. Cela se fait en plusieurs étapes a) Installation d’une nouvelle ligne ; l’instanciation de la classe Serversocket, qui met en oeuvre une sorte de port que les serveurs peuvent utiliser pour écouter et accepter les connexions des clients. Après la création, nous devons indiquer à notre socket quel port écouter, exactement comme le numéro de téléphone que vous obtenez, vous permettra de recevoir des appels. Cest le rôle du constructeur de la classe ServerSocket qui « attache » le socket serveur à un port ; ce qui nous donne ServerSocket socketserver = new c) Pendant le traitement d’une connexion. Nous avons la possibilité d’indiquer le nombre maximum de requêtes possibles. Il existe deux autres constructeurs ; l’un ètres, le premier est bien à l’appelant. Socket socketduserveur = socketserver. cept(); e) Vous savez maintenant comment créer un socket qui accepte demandes de connexion. Mais comment l’appeler ? pour passer appel téléphonique, vous devez avoir le téléphone. Eh bien, vous allez utiliser la fonction socket(), exactement comme pour l’établissement d’un socket qui doit attendre les connexions. Mais vous devez lui indiquez le nom de la machine sur laquelle le serveur est en exécution et le numéro de port sur lequel il écoute. Socket socket = new Socket(paraml, param2) f) Il faut alors écrire une fonction rassemblant les appels systèmes cidessus.
Cette fonction appelle un port particulier d’une certaine machine, qu’on lui passe en paramètre. Maintenant que vous disposez d’une connexion entre deux sockets, vous allez vouloir échanger des données entre les 2 machines mises en jeu (ou la même, le réseau étant transparent, il peut s’agir de processus sur le même système, peu importe ! ). Et là, vous allez voir la magie de la chose : on utilise les fonctions read () et write 3. 1. 5 Raccrocher le téléphone De la même façon que vous devez raccrocher le combiné téléphonique lorsque vous avez terminé sation, vous devez couper BOF lient connecté »); System. ut. println (« Génération de objet InptStream et OutputStream de la socket »); InputStream is-cIientSocket. getInputStream(); Outputstream os=clientSocket. getOutputStream(); un nombre (1 octet)! « ); int nb=is. read(); la réponse »); os. write(nb*5); du client »); clientSocket. close(); catch (10Exception e) { 1) Client. ]ava : Exemple d’un client simple e. printStackTrace(); 19 import Java. io. *; import java. net. *; import java. util. Scanner; public class Client { public static void maln(String[] args) { try { System. out. println(« Créer une connexion au serveur: »);