Communication par sockets

Dimension: px
Commencer à balayer dès la page:

Download "Communication par sockets"

Transcription

1 Communication par sockets Chapitres traités Connexion à un serveur Le langage Java permet une communication entre machines qui s'appuie sur le protocole IP (Internet Protocol), protocole de base du réseau Internet. Il y a plusieurs façons de faire communiquer des machines. Nous pouvons simplement télécharger une ressource Internet référencée par une URL (Uniform Resource Locator) ; nous avons déjà utilisé cette possibilité dans le chapitre consacré aux applets. Nous pouvons employer pour cela la classe java.net.url. Si nous voulons disposer d'un certain contrôle sur le téléchargement de données, nous pouvons obtenir des fonctionnalités supplémentaires grâce à la classe java.net.urlconnection qui sera utilisée dans le chapitre communication Applet-Servlet. Nous pouvons communiquer également par le mode "connecté" en utilisant le protocole TCP (Transmission Control Protocol). Nous établissons entre deux machines une connexion par laquelle nous ouvrons des flux de données, connexion que l'on conserve tout le temps de la communication. Les classes ServerSocket et Socket du paquetage java.net doivent être employées pour ce type de communication. Des classes du paquetage java.io sont alors utilisées pour établir les flux de données. Pour en savoir plus sur les Applets. Pour en savoir flux sur les flux de données. Connexion à un serveur Avant d'écrire notre premier programme sur les réseaux, nous allons utiliser le client Telnet pour établir des connexions à certaines machines qui proposent des services sur le réseau. Attention, par défaut le client Telnet n'est pas actif sous Windows Vista. Il est nécessaire de l'activer dans la rubrique Fonctionnalités de Windows du Panneau de configuration. Vous vous êtes peut-être déjà servi de Telnet pour communiquer avec un ordinateur distant en utilisant les commandes de son propre système d'exploitation. Vous pouvez également l'utiliser pour établir une connexion à un service quelconque sur des ordinateurs reliés à votre réseau ou sur Internet (Si le pare-feu le permet). Dans ce cas là, il suffit de respecter le protocole lié au service demandé. Rappelons qu'un service est un programme qui fonctionne en permanence (démon sous UNIX) dès que l'ordinateur est sous tension. Il est également à l'écoute du réseau pour capturer la moindre requête venant de l'extérieur, et dès lors, il va rendre le service demandé. Il est possible d'avoir plusieurs services sur une même machine, et pour les différencier, nous utilisons un numéro qui est appelé numéro de port. Ces numéros sont standardisés comme par exemple : 1. le 13 pour le service date ITS (Internet Time Service). 2. le 21 pour le service FTP, 3. le 23 pour le service Telnet, 4. le 25 pour le service SMTP, 5. le 80 pour le service HTTP, etc.

2 Pour établir la connexion avec la machine distante sur le réseau (tube de communication), il suffit de connaître le nom de la machine (nom de l'hôte) et le numéro du service (numéro de port). Ces tubes de communication sont appelés des Sockets. Exemple de mise en oeuvre Nous allons essayer de nous connecter au service date proposé par un serveur adapté sur Internet : 1. Lancez le logiciel client Telnet. 2. Etablissez ensuite la connexion au serveur time.nist.org (Situé aux Etats-Unis ) à l'aide du client Telnet. Pour cela nous utilisons la commande open. Rappelez-vous que par défaut ce service est réglé sur le port 13. open time.nist.gov 13 ou open Que se passe-t-il? Nous venons de nous connecter au service date que la plupart des serveurs UNIX implémentent en permanence. Le serveur auquel vous vous êtes connecté se trouve au NIST à Boulder dans le Colorado, et fournit l'heure d'une horloge atomique au césium. Naturellement, le temps affiché n'est pas parfaitement précis à cause des délais de propagation des informations sur le réseau. Par convention, le service date est toujours rattaché au port 13. Le programme du serveur fonctionne en permanence sur la machine distante, attendant un paquet du réseau qui essaierait de communiquer avec le port 13. Lorsque le système d'exploitation de l'ordinateur distant reçoit le paquet contenant une requête de connexion sur le port 13, le processus d'écoute du serveur est activé et la connexion est établie. Cette connexion demeure jusqu'à ce qu'elle soit arrêtée par l'une des deux parties. Lorsque vous avez ouvert une session Telnet sur le port 13 de l'ordinateur distant, une partie indépendante du logiciel réseau à converti la chaîne de texte time.nist.gov en une adresse IP associée, c'est à dire Puis le logiciel a envoyé une requête de connexion à cet ordinateur, en spécifiant le port 13. Une fois que cette connexion a été établie, le programme de l'ordinateur distant a renvoyé un ensemble de données, puis il a terminé la connexion. Bien sûr, dans le cas plus général, les clients et les serveurs entament des dialogues beaucoup plus poussés avant que la connexion ne soit interrompue.

3 Connexion à un serveur par un petit programme Java Notre premier exemple de programme réseau effectue la même chose que ce que nous venons de faire avec Telnet, c'est à dire se connecter au port 13 du service date sur le serveur time.nist.gov. Le résultat renvoyé par le service est un simple texte qu'il est possible de formater afin de le rendre plus compréhensible pour nous. package reseau; Codage correspondant import java.awt.*; import java.awt.event.*; import java.io.ioexception; import java.net.*; import java.util.scanner; import javax.swing.*; public class Client extends JFrame { private JTextField résultat = new JTextField("Cliquez sur le bouton de connexion pour connaître la date..."); private JToolBar outils = new JToolBar(); public Client() { super("service Date"); résultat.setbackground(color.yellow); add(outils, BorderLayout.NORTH); add(résultat); outils.add(new AbstractAction("Connexion à time.nist.gov") { public void actionperformed(actionevent e) { try { Socket connexion = new Socket("time.nist.gov", 13); Scanner réponse = new Scanner(connexion.getInputStream()); if (réponse.hasnextline()) { réponse.next(); Scanner date = new Scanner(réponse.next()); date.usedelimiter("-"); int année = 2000+date.nextInt(); String mois = date.next(); String jour = date.next(); résultat.settext(" "+jour+"-"+mois+"-"+année+" "+réponse.next()); catch (UnknownHostException ex) { settitle("impossible de se connecter au service"); catch (IOException ex) { settitle("gros problème de communication"); ); pack(); setlocationrelativeto(null); setdefaultcloseoperation(exit_on_close); setvisible(true); public static void main(string[] args) { new Client(); Lorsque nous établissons une communication réseau, nous devons prendre en compte un certain nombre de critères : 1. Localiser la machine distante et plus précisément le service à interroger, respectivement au moyen de son adresse IP et de son numéro de service (port). Ceci est réalisé très simplement au travers de la classe java.net.socket. La première ligne de la gestion d'événement ouvre une socket, qui est en fait une abstraction du réseau et qui permet d'établir une communication en entrée et en sortie avec le service. L'adresse de l'ordinateur distant est passée au constructeur de la socket avec le numéro du service désiré. Si la connexion ne peut pas être ouverte, une UnknowHostException est déclenchée. Si une autre erreur survient, une IOException apparaît. Socket connexion = new Socket("time.nist.gov", 13);

4 Une fois que la socket est ouverte, les méthodes getoutputstream() et getinputstream() de java.net.socket peuvent être sollicitées pour renvoyer respectivement les objets OutputStream et InputStream que vous pouvez utiliser par la suite comme n'importe quel autre flux. Evidemment, la classe Socket est très simple d'emploi, car Java masque toute la complexité inhérente à l'établissement d'une connexion réseau et à l'envoi de données. Le paquetage java.net vous fournit quand à lui une interface de programmation tout-à-fait semblable à celle que vous obtiendriez avec un simple fichier. 2. Respecter le protocole établi par le serveur. Il faut savoir par exemple qui parle en premier et surtout, il faut prendre en compte le type de l'information envoyé, ce qui se traduit généralement à choisir un flux d'information adapté. Dans le cas qui nous préoccupe, seul le serveur dialogue, sans information de retour. La réponse envoyée est un simple texte qui peut toutefois être interprété très simplement en prenant le flux de lecture de texte représenté par la classe Scanner. 3. Finalement, pour obtenir la réponse souhaitée, il suffit de se connecter au flot d'octets envoyé par le serveur au moyen de la méthode getinputstream() de la socket et de le rattacher au flux de plus haut niveau afin de formater correctement l'information : Scanner réponse = new Scanner(connexion.getInputStream()); 4. Tout le reste ensuite est connu. Nous pouvons procéder exactement de la même façon que lors d'une lecture de fichier, sauf qu'ici l'information n'est pas sur le disque dur mais transite sur le réseau. Finalement les deux lignes les plus importantes sont celles que nous venons d'évoquer. Grâce à ces deux petites lignes, nous pouvons faire une gestion extrêmement simple des informations issues du réseau : Socket connexion = new Socket("time.nist.gov", 13); Scanner réponse = new Scanner(connexion.getInputStream()); Pour en savoir plus sur les flux et les fichiers Le timeout des sockets Le principe de base d'un dialogue sur le réseau, c'est de lire le flux d'octets provenant du service jusqu'à ce que l'ensemble de l'information soit récupérée. Dans ce cas de figure, il est tout-à-fait possible que le temps de transfert soit très long, qu'il soit même beaucoup trop important, suite à un problème éventuel de connexion réseau. Il est envisageable de contrôler le temps de transfert maximum toléré pour une application au delà duquel nous considérons qu'un problème de communication réseau doit certainement se produire. Ce temps maximum est appelé timeout. La classe Socket possède la méthode setsotimeout() qui précise la valeur de la durée d'attente maximum en milliseconde à ne pas dépasser. Socket connexion = new Socket("time.nist.gov", 13); connexion.setsotimeout(10000); // 10 secondes d'attente maximum Si le timeout est atteint avant la fin de lecture complète de l'information attendue, une InterruptedIOException est levée. Vous pouvez ainsi intercepter cette exception et réagir au timeout. Dans l'écriture précédente il existe toutefois un petit soucis. Effectivement, durant la phase de construction de la connexion, le timeout n'est pas encore précisé. Le temps d'attente peut alors être infini si un problème réseau apparaît. Nous pouvons palier à ce problème en proposant la création d'une socket non-connectée, puis en la connectant plus tard avec le timeout requis, comme suit :

5 Socket connexion = new Socket(); connexion.connect(new InetSocketAddress("time.nist.gov", 13), 10000); Dans cette étude, nous ne traitons que du protocole TCP (Transmission Control Protocol). Ce protocole établit une connexion fiable entre deux ordinateurs. La plate-forme Java supporte également le pseudo-protocole UDP (User Datagram Protocol), qui peut être employé pour envoyer des paquets (aussi appelés datagrammes) plus rapidement qu'avec TCP. L'inconvénient majeur de l'udp est que les paquets peuvent arriver dans le désordre, voire même égarés. C'est donc à l'ordinateur qui reçoit ces paquets de les remettre dans le bon ordre, et de demander un nouvel envoi des paquets perdus. L'UDP est donc plus adapté à des applications pour lesquelles les paquets peuvent être égarés, comme des flux de données audio ou vidéo, ou de mesures continues. Demi-fermeture Lorsqu'un client envoi une requête au serveur, ce dernier doit pouvoir déterminer la fin de celle-ci. Pour cette raison, de nombreux protocoles Internet (comme SMTP) sont orienté vers la ligne. D'autres protocoles contiennent un en-tête qui spécifie la taille des données de la requête. En effet, indiquer la fin des données de la requête est plus difficile qu'écrire des données dans un fichier. En effet, il suffit de femer le fichier. En fermant une socket, vous vous déconnectez immédiatement du serveur. La demi-fermeture résout ce problème. Vous pouvez fermer le flux de sortie d'une socket, au moyen de la méthode shutdownoutput(), ce qui indique au serveur la fin des données de la requête, mais permet de conserver le flux d'entrée ouvert afin que vous puissiez lire la réponse. Dans ce cas, le serveur lit simplement l'entrée jusqu'à ce qu'il atteigne la fin du flux d'entrée. A ce sujet, il existe également la méthode shutdowninput() qui permet quant-à elle de fermer le flux d'entrée et de concerver le flux de sortie (utilisation plus rare). Bien entendu, ce protocole n'est utile que pour des services à opération unique comme le HTTP où le client se connecte, émet une requête, intercepte la réponse, puis se déconnecte. Exemple de mise en oeuvre A titre d'exemple, je vous propose de créer une petite application qui nous permet de consulter la page d'accueil d'un site quelconque, sans interprétation, c'est-à-dire en visualisant uniquement le balisage HTML, ce que les navigateurs appellent couramment le code source : Attention pour demander la page d'accueil du site, vous devez passer par le protocole HTTP en proposant la commande suivante (il faut tenir compte des espaces) : GET / HTTP/1.0 suivi de deux retours chariots package reseau; Codage correspondant import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.util.scanner; import javax.swing.*; public class Client extends JFrame { private JTextField adresse = new JTextField(); private JFormattedTextField port = new JFormattedTextField(80); private JTextArea éditeur = new JTextArea(20, 38); private JToolBar outils = new JToolBar(); public Client() { super("editeur HTML"); éditeur.setbackground(color.yellow);

6 éditeur.seteditable(false); adresse.setcolumns(20); port.setcolumns(4); add(outils, BorderLayout.NORTH); add(new JScrollPane(éditeur)); outils.add(new JLabel("Adresse : ")); outils.add(adresse); outils.addseparator(); outils.add(new JLabel("Port : ")); outils.add(port); outils.add(new AbstractAction("Connexion") { public void actionperformed(actionevent e) { try { Socket connexion = new Socket(adresse.getText(), (Integer) port.getvalue()); PrintWriter requête = new PrintWriter(connexion.getOutputStream(), true); Scanner réponse = new Scanner(connexion.getInputStream()); requête.println("get / HTTP/1.0\n"); connexion.shutdownoutput(); éditeur.settext(""); while (réponse.hasnextline()) éditeur.append(réponse.nextline()+"\n"); catch (IOException ex) { JOptionPane.showMessageDialog(Client.this, adresse.gettext(), "Adresse non valide", JOptionPane.ERROR_MESSAGE); ); pack(); setlocationrelativeto(null); setdefaultcloseoperation(exit_on_close); setvisible(true); public static void main(string[] args) { new Client(); La classe java.net.socket Socket(String hôte, int port) Crée une socket et la connecte à un port de l'ordinateur distant. Socket() Crée une socket qui n'a pas encore été connectée. void connect(socketaddress adresse) void connect(socketaddress adresse, int timeout) Relie cette socket à l'adresse donnée (ou s'arrête si l'intervalle de temps spécifié a expiré). boolean isconnected() Précise si la socket est connectée. void close() Ferme la socket. boolean isclosed() Précise si la socket est fermée. InputStream getinputstream() Récupère le flot de données à lire sur la socket (octets venat du réseau). OutputStream getoutputstream() Récupère le flot de données à écrire sur la socket (octets envoyés sur le réseau). void setsotimeout(int timeout) Définit la valeur de timeout en lecture sur cette socket. Si cette valeur est atteinte, une InterruptedIOException est déclenchée. void shutdownoutput() Définit le flux de sortie sur "Fin de flux". void shutdowninput() Définit le flux d'entrée sur "Fin de flux". boolean isoutputshutdown() Précise si la sortie est fermée. boolean isinputshutdown() Précise si l'entrée est fermée. InetAddress getinetaddress() Renvoie l'adresse Internet.

7 La classe java.net.inetsocketaddress InetSocketAddress(String hôte, int port) Construit un objet d'adresse avec l'ordinateur distant et le port donnés, ce qui résout le nom de l'hôte en cours de la construction. Si le nom de l'hôte ne peut être résolu, la propriété unresolved de l'objet de l'adresse est validé. boolean isunresolved() Précise si l'objet de l'adresse ne peut être résolu. Les adresses internet En général, vous n'avez pas besoin de vous préoccuper des adresses Internet, qui sont composés de quatre (ou six pour IPv6) octets de la forme Cependant, vous pouvez avoir recours à la classe InetAddress si vous souhaitez traduire un nom d'ordinateur en adresse Internet et inversement. Les classes Socket et ServerSocket disposent d'une méthode getinetaddress() qui renvoie un objet InetAddress. 1. La méthode statique getbyname() renvoie un objet InetAddress correspondant à un hôte. Ainsi, le code suivant renvoie un objet InetAddress qui encapsule la séquence de quatre octets suivante : : InetAddress adressedistante = InetAddress.getByName("time.nist.gov"); 2. Vous pouvez également accéder à chacun des octets par la méthode getaddress() : byte[ ] octets = adressedistante.getaddress(); 3. Certains sites dont le trafic est très important peuvent correspondre à plusieurs adresses Internet, pour réduire leur charge. Par exemple, le nom java.sun.com représente trois adresses Internet différentes. L'une d'entre elle est choisie au hasard lorsque la connexion est ouverte. Vous pouvez retrouver ces adresses grâce à la méthode getallbyname() : InetAddress[ ] adresses = InetAddress.getAllByName("java.sun.com"); 4. Pour terminer, vous aurez parfois besoin de votre propre adresse. Si vous vous contentez de demander l'adresse localhost, vous obtiendrez systématiquement , ce qui n'est pas très intéressant. Il vaut donc mieux utiliser la méthode getlocalhost() pour obtenir votre propre adresse : InetAddress adresselocale = InetAddress.getLocalHost(); static InetAddress getbyname(string hôte) static InetAddress[] getallbyname(string hôte) La classe java.net.inetaddress Ces méthodes construisent une adresse Internet, ou un tableau d'adresses Internet correspondant à un nom d'ordinateur distant spécifié. static InetAddress getlocalhost() Construit une adresse Internet pour l'ordinateur local. byte[] getaddress() Renvoie un tableau d'octets contenant une adresse numérique au format décimal. String gethostaddress() Renvoie une chaîne contenant des valeurs décimales séparées par des points, comme " ". String gethostname() Renvoie le nom de l'ordinateur. Exemple de mise en oeuvre Je vous propose de reprendre et de modifier l'exemple du client qui fait appel au service de date. Nous proposons cette fois-ci un afiichage supplémentaire : des ordinateurs distant et local. Affichage des différentes adresses des machines sur le réseau, en plus de la date. package reseau; Codage correspondant

8 import java.awt.*; import java.awt.event.*; import java.io.ioexception; import java.net.*; import java.util.scanner; import javax.swing.*; public class Client extends JFrame { private JTextField résultat = new JTextField("Cliquez sur le bouton de connexion pour connaître la date..."); private JToolBar outils = new JToolBar(); public Client() { super("service Date"); résultat.setbackground(color.yellow); add(outils, BorderLayout.NORTH); add(résultat); outils.add(new AbstractAction("Connexion à time.nist.gov") { public void actionperformed(actionevent e) { try { Socket connexion = new Socket("time.nist.gov", 13); Scanner réponse = new Scanner(connexion.getInputStream()); if (réponse.hasnextline()) { réponse.next(); Scanner date = new Scanner(réponse.next()); date.usedelimiter("-"); int année = 2000+date.nextInt(); String mois = date.next(); String jour = date.next(); String adressedistante = connexion.getinetaddress().gethostaddress(); String adresselocale = connexion.getinetaddress().getlocalhost().gethostaddress(); résultat.settext(" ("+adressedistante+" --> "+adresselocale+") "+jour+"-"+mois+"-"+année+" "+réponse.next()); catch (UnknownHostException ex) { settitle("impossible de se connecter au service"); catch (IOException ex) { settitle("gros problème de communication"); ); pack(); setlocationrelativeto(null); setdefaultcloseoperation(exit_on_close); setvisible(true); public static void main(string[] args) { new Client(); Implémentation de serveurs Maintenant que nous avons implémenté un client simple qui reçoit des données d'un serveur sur Internet (ou sur le réseau local), intéressons-nous à la fabrication d'un serveur simple qui devra envoyer des informations sur Internet (ou sur le réseau local). Une fois que ce serveur (service) sera lancé, il devra attendre qu'un client se connecte à l'un de ces port. Nous choisissons le port 8189, qui n'est utilisé par aucun service standard. 1. La classe java.net.serversocket permet de monter un service. Cette classe sera ensuite utilisée pour établir une communication par le réseau au moyen d'un point de comminication qu'est la socket. Dans notre cas, le service doit se rattacher au port 8189 : ServerSocket service = new ServerSocket(8189); 2. La méthode accept() demande au programme d'attendre indéfiniment jusqu'à ce qu'un client se connecte sur ce port. Une fois qu'un ordinateur s'y est connecté en envoyant une requête adéquate sur le réseau, cette méthode renvoie un objet Socket qui représente la connexion établie : Socket client = service.accept(); // méthode blocante 3. Vous pouvez vous servir ensuite de cet objet pour lire et pour écrire au travers de cette socket, comme nous l'avons déjà fait dans le chapitre précédent : Scanner requête = new Scanner(client.getInputStream()); PrintWriter réponse = new PrintWriter(client.getOutputStream()); Tout ce que le serveur envoie à son flux de sortie devient un flux d'entrée pour le programme client, et toutes les sorties du client deviennent les entrées du serveur.

9 Pour l'instant, dans ces exemples nous transmettons du texte. Nous pourrions bien sûr transmettre des données binaires, il faudrait alors utiliser respectivement les classes DataInputStream et DataOutputStream. Pour transmettre des objets en série, il faudrait utiliser ObjectInputStream et ObjectOutputStream. 4. Dans ce serveur très simple, nous nous contentons de lire les données du client, une ligne à la fois, et de les afficher. Cela met en évidence le fait que ce programme reçoit bien les données du client. package reseau; import java.io.*; import java.net.*; import java.util.scanner; public class ServeurEcho { public static void main(string[] args) throws IOException { ServerSocket service = new ServerSocket(8189); Socket client = service.accept(); // attend la connexion du client Scanner requête = new Scanner(client.getInputStream()); PrintWriter réponse = new PrintWriter(client.getOutputStream(), true); réponse.println("bonjour, tapez OK pour sortir"); while (requête.hasnextline()) { String ligne = requête.nextline(); réponse.println("echo : "+ligne); if (ligne.trim().equalsignorecase("ok")) break; client.close(); // fermeture de la connexion du client Un serveur réel ferait des claculs intermédiaires sur les données reçues et renverrait sa réponse. 5. Pour terminer, il ne faut pas oublier de fermer la socket ouverte (fermeture de la connexion réseau). Nous pouvons tester ce programme en utilisant Telnet. Une fois que le serveur est lancé, établissons la connexion au port 8189 sur l'ordinateur qui propose le service : Lorsque nous nous connectons, nous obtenons le message d'invite "Bonjour, tapez OK pour sortir". Saisissons n'importe quoi, le serveur nous répond en nous renvoyant notre message précédé de "Echo : ". Pour nous déconnecter, il suffit de taper "ok" ou "OK". Le programme du serveur sera alors également arrêté. ServerSocket(int port) throws IOException Crée un service qui examine un port. Socket accept() La classe java.net.serversocket Attend une connexion. Cette méthode bloque le thread courant jusqu'à ce que la connexion soit établie. Cette méthode renvoie un objet Socket grâce auquel le programme peut communiquer avec le client. void close() throws IOException Clôture le service. Exemple de mise en place d'un service date personnel

10 package reseau; Codage correspondant import java.io.*; import java.net.*; import java.text.dateformat; import java.util.date; public class ServeurDate { public static void main(string[] args) throws IOException { ServerSocket service = new ServerSocket(13); Socket client = service.accept(); // attend la connexion du client PrintWriter réponse = new PrintWriter(client.getOutputStream(), true); réponse.println(dateformat.getdatetimeinstance(dateformat.full, DateFormat.MEDIUM).format(new Date())); client.close(); Servir plusieurs clients Le serveur de l'exemple précédent possède un inconvénient. Supposons que nous voulions permettre à plusieurs clients de se connecter en même temps à notre serveur. Typiquement, un serveur est exécuté en permanence sur un ordinateur dédié à cette tâche, et plusieurs clients sur Internet peuvent se connecter à ce serveur simultanément. Si le serveur ne peut pas gérer plusieurs connexions en même temps, un utilisateur pourra le monopoliser en restant connecté longtemps. Mais nous pouvons faire beaucoup mieux grâce à la magie des threads. Pour en savoir plus sur les threads. 1. Chaque fois que le programme a établi une nouvelle connexion, c'est à dire qu'il a accepté une requête, nous allons créer un nouveau thread qui sera chargé de la gestion de la connexion entre le serveur et ce client. Le programme reviendra alors en arrière et attendra la prochaine connexion. Pour que cela puisse se produire, la boucle principale doit ressembler à ceci :

11 2. La classe ThreadConnexion dérive de Thread et contient la boucle de communication avec le client dans la méthode run(). Dans l'absolue, il est généralement préférable d'implémenter l'interface Runnable plutôt que de faire un héritage directement depuis la classe Thread. De même, il vaut mieux utiliser la classe Scanner en lieu et place de la classe BufferedReader. 3. Comme chaque nouvelle connexion lance un nouveau thread, plusieurs clients peuvent se connecter au serveur en même temps. Effectuez le test en lançant dans un premier temps le service ServeurThread, et ensuite, à partir de plusieurs ordinateurs, exécutez le programme Telnet en établissant la connexion vers l'ordinateur hôte au port Cette fois-ci, le numéro de la connexion a été rajouté sur le message de retour. Programmes Client-Serveur Pour faire la synthèse de ce que nous venons de voir, nous allons créer deux systèmes client-serveur plus utiles : 1. D'une part un module de conversion entre les uros et les francs : nous prévoyons un système multi-client. 2. D'autre part un système de transfert de photos sur le réseau. Cette fois-ci, nous attendons que le premier client ait envoyé la photo avant de prendre en compte un deuxième client éventuel.

12 Conversion entre les uros et les francs Le premier système, permet de réaliser des conversions entre les uros et les francs. Au début le client doit préciser la localisation du service. Une fois que le connexion est établie, elle reste opérationnelle jusqu'à ce que le client clôture l'application graphique. package reseau; Mise en oeuvre du service import java.io.*; import java.net.*; public class ServeurConversion { public static void main(string[] args) throws IOException { ServerSocket service = new ServerSocket(1234); System.out.println("Service (1234) en fonction..."); while (true) { System.out.println("Attente d'un nouveau client..."); Socket client = service.accept(); // attend la connexion d'un client new Thread(new Connexion(client)).start(); class Connexion implements Runnable { private Socket client; private final double TAUX = ; private double uro, franc; public Connexion(Socket client) { this.client = client; public void run() { String adresse = client.getinetaddress().gethostaddress(); try { DataInputStream requête = new DataInputStream(client.getInputStream()); DataOutputStream réponse = new DataOutputStream(client.getOutputStream()); System.out.println("Client ("+adresse+") connecté..."); while (true) { String demande = requête.readutf(); if (demande.equals("eurofranc")) { uro = requête.readdouble(); franc = uro * TAUX; réponse.writedouble(franc); if (demande.equals("franceuro")) { franc = requête.readdouble(); uro = franc / TAUX; réponse.writedouble( uro); catch (Exception ex) { System.err.println("Fin de la connexion avec le client ("+adresse+")"); package reseau; Mise en oeuvre de la partie cliente import java.awt.*; import java.awt.event.*; import java.io.*; import java.net.*; import java.text.*; import javax.swing.*; public class ClientConversion extends JFrame { private JTextField adresseip = new JTextField(12); private JFormattedTextField euro = new JFormattedTextField(NumberFormat.getCurrencyInstance()); private JFormattedTextField franc = new JFormattedTextField(new DecimalFormat("#,##0.00 F")); private JToolBar outils = new JToolBar("Localisation du serveur"); private Socket connexion; private DataOutputStream requête; private DataInputStream réponse; public ClientConversion() { super("convertisseur uro <-> Franc");

13 euro.setvalue(0.0); franc.setvalue(0.0); add(outils, BorderLayout.NORTH); outils.add(new JLabel("Adresse IP : ")); outils.add(adresseip); outils.add(new AbstractAction("Connexion") { public void actionperformed(actionevent e) { try { connexion = new Socket(adresseIP.getText(), 1234); requête = new DataOutputStream(connexion.getOutputStream()); réponse = new DataInputStream(connexion.getInputStream()); catch (UnknownHostException ex) { settitle("service non accessible"); catch (IOException ex) { settitle("problème de communication réseau"); ); outils.add(new AbstractAction(" F ") { public void actionperformed(actionevent e) { try { requête.writeutf("eurofranc"); Number valeur = (Number) euro.getvalue(); requête.writedouble(valeur.doublevalue()); franc.setvalue(réponse.readdouble()); catch (IOException ex) { settitle("le calcul n'a pas être fait correctement"); ); outils.add(new AbstractAction(" ") { public void actionperformed(actionevent e) { try { requête.writeutf("franceuro"); Number valeur = (Number) franc.getvalue(); requête.writedouble(valeur.doublevalue()); euro.setvalue(réponse.readdouble()); catch (IOException ex) { settitle("le calcul n'a pas être fait correctement"); ); add(euro); add(franc, BorderLayout.SOUTH); pack(); setlocationrelativeto(null); setdefaultcloseoperation(exit_on_close); setvisible(true); public static void main(string[] args) { new ClientConversion(); Transfert d'images sur le réseau A titre d'exemple, pour valider à la fois le fonctionnement du réseau, mais égalemenent la bonne gestion des flux, je vous propose de visualiser automatiquement une photo numérique sur le serveur qui est envoyé par un client sur le réseau local. Nous devons donc élaborer deux applications : 1. La première, qui correspond au client du réseau, doit récupérer des photos présentes sur le poste local et les afficher ensuite dans la zone principale de la fenêtre. Ainsi, vous avez la possibilité de choisir la photo qui vous plait afin de l'envoyer au service de visionnage. 2. La deuxième, sur le serveur, en attente d'éventuels transferts sur le réseau, affiche la photo envoyée par la première application. Application cliente qui envoi les photos... Serveur qui reçoit les photos

14 package photos; photos.panneauimage.java import javax.swing.jcomponent; import java.awt.graphics; import java.awt.image.bufferedimage; class PanneauImage extends JComponent { private BufferedImage image; private double ratio; public void change(bufferedimage image) { if (image!=null) { this.image = image; ratio = (double)image.getwidth()/image.getheight(); protected void paintcomponent(graphics surface) { if (image!=null) surface.drawimage(image, 0, 0, this.getwidth(), (int)(this.getwidth()/ratio), null); package photos; photos.clientphotos.java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.bufferedimage; import java.io.*; import java.net.*; import javax.imageio.*; public class ClientPhotos extends JFrame implements ActionListener { private String répertoire = "J:/Stockage/"; private String[] liste; private PanneauImage panneau = new PanneauImage(); private JComboBox choix; private JButton envoyer = new JButton("Envoyer la photo"); public ClientPhotos() { liste = new File(répertoire).list(); choix = new JComboBox(liste); panneau.change(récupérer()); choix.addactionlistener(this); envoyer.addactionlistener(this); setsize(500, 400); settitle("envoi de photos"); add(choix, BorderLayout.NORTH); add(envoyer, BorderLayout.SOUTH); add(panneau); setdefaultcloseoperation(exit_on_close); setvisible(true); private BufferedImage récupérer() { try { BufferedImage photo = ImageIO.read(new File(répertoire+choix.getSelectedItem())); return photo; catch (Exception ex) { settitle("problème de localisation des photos"); return null; public static void main(string[] args) { new ClientPhotos(); public void actionperformed(actionevent e) { if (e.getsource() == choix) { panneau.change(récupérer()); else if (e.getsource() == envoyer) { try { File fichier = new File(répertoire+choix.getSelectedItem()); byte[] octets = new byte[(int)fichier.length()]; FileInputStream photo = new FileInputStream(fichier); photo.read(octets); envoyer(octets);

15 catch (IOException ex) { settitle("problème avec le fichier"); private void envoyer(byte[] octets) { try { Socket connexion = new Socket("localhost", 7777); ObjectOutputStream fluxréseau = new ObjectOutputStream(connexion.getOutputStream()); fluxréseau.writeobject(octets); connexion.close(); catch (IOException ex) { settitle("problème avec le serveur"); package photos; photos.serveurphotos.java import java.io.*; import java.net.*; import javax.swing.jframe; import javax.imageio.imageio; import java.awt.image.bufferedimage; public class ServeurPhotos extends JFrame { private static PanneauImage panneau = new PanneauImage(); public ServeurPhotos() { setsize(500, 400); settitle("visionneuse"); add(panneau); setdefaultcloseoperation(exit_on_close); setvisible(true); public static void main(string[] args) throws Exception { new ServeurPhotos(); activerservice(); public static void activerservice() throws Exception { ServerSocket service = new ServerSocket(7777); while (true) { Socket client = service.accept(); ObjectInputStream fluxréseau = new ObjectInputStream(client.getInputStream()); byte[] octets = (byte[]) fluxréseau.readobject(); ByteArrayInputStream fluximage = new ByteArrayInputStream(octets); BufferedImage photo = ImageIO.read(fluxImage); panneau.change(photo); Les sockets interruptibles Lorsque nous nous connectons à une socket, le thread courant se bloque jusqu'à ce que le connexion s'établisse ou lorsque le timeout arrive à expiration. De la même manière, lorsque nous faisons une lecture ou une écriture d'informations au travers de la socket, le thread courant se bloque jusqu'à que l'opération de transfert soit définitivement terminée ou, encore une fois lorsque le timeout arrive à expiration. Dans une application normale, ou l'interactivité avec l'utilisateur est prépondérante, nous devons lui proposer, à tout moment, d'annuler la communication avec le service distant notamment si la connexion a du mal à s'établir. Cependant, nous ne pouvons pas mettre en oeuvre un thread concurrent, en faisant appel notamment à la méthode interrupt() tant que la socket n'est pas en fonctionnement. 1. Pour permettre l'interruption d'une socket à tout moment, vous devez utiliser la classe SocketChannel qui se trouve dans le paquetage java.nio.channels. Ouvrez la socket de la façon suivante : SocketChannel canal = SocketChannel.open(new InetSocketAddress(hôte, port)); Un canal ne possède pas de flux associés. Par contre, il dispose de méthodes read() et write() qui utilisent un objet Buffer. Ces méthodes sont déclarées respectivement dans les interfaces ReadableByteChannel et WritableByteChannel. 2. Si vous désirez avoir affaire avec des buffers, vous pouvez utiliser la class Scanner pour lire directement à partir de la classe SocketChannel, parce que la classe Scanner dispose d'un constructeur avec un paramètre de type ReadableByteChannel : Scanner lecture = new Scanner(canal); 3. Pour connecter un flux de sortie à partir d'un canal, vous avez la possibilité de prendre la méthode statique java.nio.channels.channels.newoutputstream() :

16 OutputStream écriture = Channels.newOutputStream(canal); 4. De même, de façon symétrique, il existe la méthode statique java.nio.channels.channels.newinputstream() pour permettre une connexion à un flux d'entrée standard : InputStream lecture = Channels.newInputStream(canal); Voilà tout ce que vous deviez savoir sur ce sujet. A chaque fois qu'un thread est interrompu durant l'opération d'ouverture, de lecture ou d'écriture sur une socket, le système n'est plus bloqué, mais se termine par une exception. InetSocketAddress(String hôte, int port) La classe java.net.inetsocketaddress Construit un objet d'adresse avec l'ordinateur distant et le port donnés, ce qui résout le nom de l'hôte en cours de la construction. Si le nom de l'hôte ne peut être résolu, la propriété unresolved de l'objet de l'adresse est validé. boolean isunresolved() Précise si l'objet de l'adresse ne peut être résolu. static SocketChannel open(socketadress adresse) Ouvre un canal de socket et se connecte au service spécifié par l'adresse. La classe java.nio.channels.socketchannel La classe java.nio.channels.channels static InputStream newinputstream(readablebytechannel canal) Propose un flux en entrée à partir du canal spécifié en paramètre. static OutputStream newoutputstream(writablebytechannel canal) Propose un flux en sortie à partir du canal spécifié en paramètre. Connexion à des URLs Pour accéder à un serveur Web depuis un programme client Java, il serait préférable de travailler à plus haut niveau, plutôt que de mettre en place une gestion par socket, avec les flux d'entrée-sortie associés. Le plus difficile, lorsque nous passons par une architecture classique, est la mise en oeuvre des requêtes issues du protocole HTTP. Dans ce chapitre, nous allons découvrir comment mettre en place un système très performant, grâce à des classes adaptées et tout-à-fait compétentes dans ce genre de protocole. URL et URI Les classes URL et URLConnection encapsulent la plupart des problèmes liés à la récupération d'informations sur un site distant. 1. Voici comment spécifier une adresse URL : URL adresse = new URL(" La plate-forme Java prend en charge les ressources suivantes : http: https: ftp: file: et jar: 2. Si vous souhaitez simplement aller chercher le contenu des ressources, vous pouvez utiliser la méthode openstream() de la classe URL. Cette méthode produit un InputStream. Grâce à cet objet de flux, vous lirez facilement le contenu de la ressource : InputStream flux = adresse.openstream(); Scanner requête = new Scanner(flux); Le paquetage java.net fait une distinction utile entre les URL (adresses Internet) et les URI (identificateurs de ressources). 1. Une URI représente la construction de syntaxe pure, qui spécifie les différentes parties de la chaîne de ressource Web. 2. Une URL est en réalité une sorte d'uri, à savoir une URI disposant de suffisamment d'informations pour localiser une ressource. 3. D'autres URI, comme mailto:emmanuel.remy@wanadoo.fr ne sont pas des agents de localisation ; il n'existe en effet pas de données permettant de localiser cet identificateur. Cette URI est appelée URN (nom des ressources uniformes). 4. Dans la bibliothèque Java, la classe URI ne possède pas de méthodes permettant d'accéder à la ressource spécifiée par l'identificateur : son unique objectif est l'analyse. 5. Au contraire, la classe URL peut ouvrir un flux vers la ressource. Pour cette raison, la classe URL fonctionne uniquement avec des identificateurs d'une catégorie que la bibliothèque Java sait gérer, comme http: https: ftp: file: et jar: Spécification des URI (et donc également des URL)

17 Pour savoir à quel moment une classe URI peut être nécessaire, il faut envisager le complexité des URL. Par exemple : ftp://utilisateur:motdepasse@ftp.site.com/pub/file.txt La spécification de l'uri donne les règles de la création de ces identifiants : 1. Une URI possède la syntaxe : [schéma:]spécification du schéma[#fragment] Ici le texte [... ] dénote une partie optionnelle et les caractères : et # figurent littéralement dans l'identifiant. 2. Si la partie schéma: est présente, l'uri est dite absolue. Autrement, elle est dite relative. 3. Une URI absolue est opaque si spécification du schéma ne commence par par un / comme : mailto:emmanuel.remy@wanadoo.fr 4. Toutes les URI absolues non opaques et toutes les URI relatives sont hiérarchiques. Par exemple : 5. La spécification du schéma d'une URI hiérarchique affiche la structure : [//autorité][chemin][?requête] 6. Pour les URI basées sur des serveurs, la partie autorité possède la forme : [utilisateur@]hôte[:port] 7. L'un des objectif de la classe URI est d'analyser un identifiant et de le diviser en plusieurs composants. Voici deux exemple d'uri : ftp://utilisateur:motdepasse@ftp.site.com/pub/file.txt A partir de ces deux exemples, nous pouvons récupérer cahque composant avec des méthodes adaptées : getscheme() ==> [schéma:] 1 http 2 ftp getschemespecificpart() ==> spécification du schéma 1 //maps.google.fr/maps:80?hl=fr&tab=wl 2 //utilisateur:motdepasse@ftp.site.com/pub/file.txt getauthority() ==> [//autorité] 1 //maps.google.fr:80 2 //utilisateur:motdepasse@ftp.site.com getuserinfo() ==> [utilisateur@] 1 2 utilisateur:motdepasse gethost() ==> hôte 1 maps.google.fr 2 ftp.site.com getport() ==> [:port] getpath() ==> [chemin]

18 1 /maps 2 /pub/file.txt getquery() ==> [?requête] 1 hl=fr&tab=wl 2 //utilisateur:motdepasse@ftp.site.com/pub/file.txt getfragment() ==> [#fragment] 1 partie 2 getprotocol() : 1 http 2 ftp getdefaultport() : getcontent() : délivre le contenu issu de la requête proposée, par exemple, la page Web. getref() : renvoie l'ancre de cette URL. getexternalform() : renvoie la chaîne de caractères représentant cette URL. touri() et tourl() : pour passer d'une URL à une URI et vice-versa. 8. L'autre objectif de la classe URI est la gestion des identifiants absolues et relatifs.si vous disposez d'une URI absolue comme : et d'une URI relative comme :../../java/net/socket.html#socket() Vous pouvez alors associer les deux dans une URI absolue : Cette procédure s'appelle la résolution d'une URL relative. La procédure opposée est appelée revitalisation. Par exemple, supposons que vous ayez une URI de base : et d'une URI : l'uri relative serait : java/lang/string.html La classe URI prend en charge ces deux opérations : relative = base.relativize(combinée) combinée = base.resolve(relative) Beaucoup de méthodes sont communes pour les deux classes URL et URI. La classe URI propose des méthodes supplémentaires qui vont au dela de la localisation spécifique des URL. Récupérer des informations sur un site distant Si vous désirez obtenir plus d'informations sur une ressource particulière, il vous faudra recourrir à la classe URLConnection, qui fournit un contrôle plus précis que la classe URL de base. Lorsque vous travaillez avec un objet URLConnection, vous devez respecter un processus bien précis, qui voici : 1. Appelez la méthode openconnection() de la classe URL pour obtenir un objet URLConnection :

19 URL adresse = new URL(" URLConnection connexion = adresse.openconnexion(); 2. Définissez certaines propriétés avec les méthodes suivantes : setdoinput() : setdooutput() : setifmodifiedsince() : setusescaches() : setallowuserinteraction() : setrequestproperty() : Nous reviendrons sur ces méthodes un peu plus loin dans cette section. 3. Connectez-vous à la ressource distante en appelant la méthode connect() : connexion.connect(); En plus d'établir une connexion de socket avec un serveur, cette méthode demande aussi au serveur des informations d'en-tête. 4. Après vous être connecté au serveur, vous pouvez lui demander des informations d'en-tête. Il existe deux méthodes pour passer en revue les champs des en-têtes : getheaderfieldkey() et getheaderfield(). Il existe également une méthode getheadersfields() qui obtient un objet Map standard contenant les champs d'en-tête. Par souci de simplicité, les méthode suivantes récupèrent les champs standards : getcontenttype() getcontentlength() getcontentencoding() getdate() getexpiration() getlastmodified() 5. Pour terminer, vous pouvez accéder aux données de la ressource spécifiée. La méthode getinputstream() fournit un flux de données en entrée permettant de lire les informations. Il s'agit du même flux de données que celui envoyé par la méthode openstream() de la classe URL. Il existe également une méthode getobject(), mais dans la pratique elle n'est pas très utile. Les objets renvoyés par les types de contenus standard (comme text/plain et image/gif) nécessitent des classes de la hiérarchie com.sun pour être traitées. Attention, les méthodes getinputstream() et getoutputstream() de la classe URLConnection ne sont pas identiques à celles de la classe Socket. La classe URLConnection est assez magique en coulisses, en particulier pour la gestion des en-têtes de requêtes et de réponses. Pour cette raison, il est important que vous suiviez bien les étapes de configuration de la connexion. Examinons maintenant certaines méthodes en détail. 1. Il existe plusieurs méthodes pour définir les propriétés d'une connexion avant de vous connecter à un serveur. Les deux plus importantes sont setdoinput() et setdooutput(). Par défaut, une connexion fournit un flux de données d'entrée en lecture, amis aucun flux de sortie en écriture. Si vous désirez cependant un flux de sortie (par exemple pour envoyer des données à un serveur Web (comme lors d'une communication entre une applet et une servlet), vous devrez appeler : connexion.setdooutput(true); Pour en savoir plus sur la communication entre applet et servlet. 2. Puis, vous pouvez vouloir définir certains en-têtes de requêtes. Ceux-ci sont envoyés avec la commande de requête au serveur. En voici un exemple : GET HTTP/1.0 Referer: Proxy-Connection: Keep-Alive User-Agent: Mozilla/4.76 (Windows ME; U) Opera 9.26 [fr] Host: Accept: text/html, image/gif, image/jpeg, image/png, */* Accept-Language: fr Accept-Charset: iso , *, utf-8 Cookie: orangemilano= La méthode setifmodifiedsince() indique à la connexion que vous n'êtes intéressé que par les données qui ont été modifiées depuis une certaine date.

20 4. Les méthodes setusecaches() et setallowuserinteraction() ne sont utilisées que dans les applets. La méthode setusescaches() demande au navigateur de commencer par vérifier sa mémoire cache. La méthode setallowuserinteraction() permet à une application d'afficher une boîte de dialogue pour demander à l'utilisateur son nom et son mot de passe pour les ressources protégées par un mot de passe. Ces paramètres nont aucun effet en dehors des applets. 5. Pour terminer, il existe une méthode générale, setrequestproperty(), qui vous permet de définir n'importe quelle paire nom/valeur correspondant à un protocole particulier. Malheureusement, ces paramètres ne sont pas très bien documentés et ne circulent que par du bouche à oreille entre les programmeurs. Par exemple, si vous voulez accéder à une page Web protégée par mot de passe, vous devez respecter les étapes suivantes : Créez une chaîne composée du nom de l'utilisateur suivi d'un deux-points et du mot de passe : String entrée = nom + ":" + motdepasse; Encodez la chaîne résultante en Base 64. Cet encodage transforme une séquence d'octets en chaîne de caractères ASCII imprimables. String encodage = new sun.misc.base64encoder().encode(entrée); Appelez la méthode setrequestproperty() avec en paramètres la chaîne "Authorization" et la valeur "Basic " + encodage : connexion.setrequestproperty("autorization", "Basic "+encodage); 6. Une fois que vous avez appelé la méthode connect(), vous pouvez demander des informations d'en-tête. Commençons par énumérer les champs d'en-tête. Cette classe se distingue par la mise en place d'un nouveau protocole. L'appel suivant récupère la n'ième clé d'un entête, où n doit commencer à 1. Elle renvoie null si n vaut 0 ou s'il est supérieur au nombre de champ de l'en-tête. String clé = connexion.getheaderfieldkey(n); Il n'existe aucune méthode pour renvoyer directement le nombre de champs d'un en-tête. Il suffit alors d'appeler getheaderfieldkey() jusqu'à obtenir null. 7. De même, l'appel suivant renvoi la n'ième valeur : String valeur = connexion.getheaderfield(n); Il existe maintenant une méthode identique qui permet de spécifier, sous forme de chaîne de caractères, l'intitulé de la clé : String valeur = connexion.getheaderfield("content-length"); 8. Heureusement, il existe une méthode plus générique, intitulée getheaderfields() qui renvoie une carte de champs d'en-tête de réponse auquel vous pouvez accéder : Map champsentête = connexion.getheaderfields(); Voici un ensemble de champs d'en-têtes typiques d'un requête HTTP : Date: Wed, 3 Jun :34:38 GMT Server: Apache/2.2.2 (Unix) Last-Modified: Thu, 17 Apr :42:03 GMT Accept-Ranges: bytes Content-Length: 4813 Connection: close Content-Type: text/html 9. Pour plus de simplicité, six méthodes récupèrent directement les valeurs des types d'en-têtes les plus courants, et les convertissent en types numériques lorsque cela est approprié. Nom du champ Méthode Type de retour Date getdate() long Expires getexpiration() long Last-Modified getlastmodified() long Content-Length getcontentlength() int Content-Type getcontenttype() String Content-Encoding getcontentencoding() String

21 Les méthodes dont le type de retour est long renvoient le nombre de secondes écoulées depuis le 1er janvier 1970, GMT. Exemple de mise en oeuvre Pour conclure tout ce chapitre, je vous propose de mettre en oeuvre un tout petit navigateur juste capable d'affiché le contenu d'une page Web. Nous profiterons de ce navigateur pour ajouter un onglet qui nous donnera toutes les indications de consultation du serveur Web distant : 1. Examen global de l'url proposée 2. Caractéristiques du serveur Web Fonctionnement global du navigateur package navigateur; Codage correspondant import javax.swing.*; import java.net.*; import java.text.messageformat; public class Navigateur extends JFrame { private JTabbedPane onglets = new JTabbedPane(); private JTextArea caractéristiques = new JTextArea();

22 public Navigateur(URL url) throws Exception { super(url.toexternalform()); onglets.addtab("page Web", new JScrollPane(new JEditorPane(url))); onglets.addtab("caractéristiques du serveur", caractéristiques); analyse(url); add(onglets); setsize(800, 700); setdefaultcloseoperation(exit_on_close); setvisible(true); private void analyse(url url) throws Exception { caractéristiques.append("autorité : "+url.getauthority()+'\n'); caractéristiques.append("hôte : "+url.gethost()+'\n'); caractéristiques.append("chemin : "+url.getpath()+'\n'); caractéristiques.append("protocole : "+url.getprotocol()+'\n'); caractéristiques.append("requête : "+url.getquery()+'\n'); caractéristiques.append("ancre : "+url.getref()+'\n'); caractéristiques.append("info utilisateur : "+url.getuserinfo()+'\n'); caractéristiques.append("port par défaut : "+url.getdefaultport()+'\n'); caractéristiques.append("port : "+url.getport()+'\n'); caractéristiques.append("fragment : "+url.touri().getfragment()+'\n'); caractéristiques.append("schéma : "+url.touri().getscheme()+'\n'); caractéristiques.append("spécification du schéma : "+url.touri().getschemespecificpart()+'\n'); URLConnection connexion = url.openconnection(); String motifdate = "{0, date, full {0, time, medium"; String motifnombre = "{0, number, integer octets"; caractéristiques.append("type de contenu : "+connexion.getcontenttype()+'\n'); caractéristiques.append("taille du document : "+MessageFormat.format(motifNombre, connexion.getcontentlength())+'\n'); caractéristiques.append("type d'encodage : "+connexion.getcontentencoding()+'\n'); caractéristiques.append("instant de téléchargement : "+MessageFormat.format(motifDate, connexion.getdate())+'\n'); caractéristiques.append("dernières modification : "+MessageFormat.format(motifDate, connexion.getlastmodified())+'\n'); caractéristiques.append("date d'expiration : "+MessageFormat.format(motifDate, connexion.getexpiration())+'\n'); caractéristiques.append("serveur : "+connexion.getheaderfield("server")+'\n'); caractéristiques.append("type accepté : "+connexion.getheaderfield("accept-ranges")+'\n'); public static void main(string[] args) { String adresse = JOptionPane.showInputDialog("URL :"); try { new Navigateur(new URL(adresse)); catch (Exception ex) { JOptionPane.showMessageDialog(null, "Mauvaise URL : "+adresse); Nous disposons maintenant de tous les outils nécessaire pour mettre en oeuvre une petite application "Chat". Nous en limiterons les performances avec la possibilité de se connecter à un instant donné à un seul interlocuteur. Je rappelle qu'un Chat est la fois client et serveur. Au départ, lorsque le logiciel est lancé, le service est mise en route et attend une connexion éventuelle venant de l'extérieur. Lorsque le contact s'établie, vous pouvez envoyer vos messages dans la zone de saisie. Votre interlocuteur le reçoit alors dans la zone principale de la fenêtre. Vous pouvez demander vous-même à vous connecter avec votre interlocuteur, il suffit de placer alors le nom de l'hôte dans la zone prévue à cet effet.

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant. Chapitre 7 Le mode de communication en connexion est, a priori, supporté par le protocole TCP. Ce protocole fournit une communication fiable; les données sont transmises comme chaînes d octets. Avant de

Plus en détail

Programmation Internet en Java

Programmation Internet en Java Chapitre 8 Programmation Internet en Java Vous avez déjà utilisé Internet, le plus connu des inter-réseaux mondiaux d ordinateurs et quelques-uns de ses services, en particulier le web et le courrier électronique.

Plus en détail

L3 informatique TP n o 2 : Les applications réseau

L3 informatique TP n o 2 : Les applications réseau L3 informatique TP n o 2 : Les applications réseau Sovanna Tan Septembre 2009 1/20 Sovanna Tan L3 informatique TP n o 2 : Les applications réseau Plan 1 Transfert de fichiers 2 Le Courrier électronique

Plus en détail

Le modèle client-serveur

Le modèle client-serveur Le modèle client-serveur Introduction Christian Bulfone christian.bulfone@gipsa-lab.fr www.gipsa-lab.fr/~christian.bulfone/ic2a-dciss Master IC2A/DCISS Année 2012/2013 Encapsulation : rappel Données Données

Plus en détail

Serveurs de noms Protocoles HTTP et FTP

Serveurs de noms Protocoles HTTP et FTP Nils Schaefer Théorie des réseaux (EC3a) Serveurs de noms Protocoles HTTP et FTP Théorie des réseaux (EC3a) Séance 7 Pourquoi DNS? Internet est une structure hiérarchique et arborescente de réseaux et

Plus en détail

HTTP 1.1. HyperText Transfer Protocol ... ... TCP IP ...

HTTP 1.1. HyperText Transfer Protocol ... ... TCP IP ... HTTP 1.1 Place de http dans le modèle osi : HyperText Transfer Protocol...... TCP IP...... HTTP est un protocole «sans état» : chaque page WEB est transmise dans une connexion séparée (sauf pour les connections

Plus en détail

Le service FTP. M.BOUABID, 04-2015 Page 1 sur 5

Le service FTP. M.BOUABID, 04-2015 Page 1 sur 5 Le service FTP 1) Présentation du protocole FTP Le File Transfer Protocol (protocole de transfert de fichiers), ou FTP, est un protocole de communication destiné à l échange informatique de fichiers sur

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet TP Composants Java ME - Java EE Vous allez, dans ce TP, construire une architecture client serveur, plus précisément MIDlet cliente, servlet serveur. Pour cela, on va d'abord installer la partie serveur

Plus en détail

(structure des entêtes)

(structure des entêtes) Aide mémoire HTTP (structure des entêtes) Fabrice HARROUET École Nationale d Ingénieurs de Brest http://www.enib.fr/~harrouet/ enib 1/10 Structure générale d une requête Requête HTTP méthode ressource

Plus en détail

Introduction à HTTP. Chapitre 3 3.1 HTTP 0.9

Introduction à HTTP. Chapitre 3 3.1 HTTP 0.9 Chapitre 3 Introduction à HTTP L HyperText Transfer Protocol, plus connu sous l abréviation HTTP (littéralement protocole de transfert hypertexte ) est un protocole de communication client-serveur développé

Plus en détail

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau) CS WEB Ch 1 Introduction I. INTRODUCTION... 1 A. INTERNET INTERCONNEXION DE RESEAUX... 1 B. LE «WEB» LA TOILE, INTERCONNEXION DE SITES WEB... 2 C. L URL : LOCALISER DES RESSOURCES SUR L INTERNET... 2 D.

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Développement Logiciel

Développement Logiciel Développement Logiciel Éxamen session 1-2012-2013 (Vendedi 25 mai, 9h-11h) Seuls les documents liés directement au cours sont autorisés (comme dit sur le site) : sujets de TD, notes de cours, notes personnelles

Plus en détail

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose. Université Paris 7 M2 II Protocole Internet TP3 Mail Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose. 1 Protocole SMTP 1. Le protocole SMTP est définit dans

Plus en détail

RMI le langage Java XII-1 JMF

RMI le langage Java XII-1 JMF Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine

Plus en détail

Interfaces graphiques avec l API Swing

Interfaces graphiques avec l API Swing Interfaces graphiques avec l API Swing Les Swing Les classes graphiques Swing dérivent de la classe JComponent, qui hérite ellemême de la classe AWT (Abstract Window Toolkit). Tous les composants Swing

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

Java 7 Les fondamentaux du langage Java

Java 7 Les fondamentaux du langage Java 184 Java 7 Les fondamentaux du langage Java 1.1 Les bibliothèques graphiques Le langage Java propose deux bibliothèques dédiées à la conception d'interfaces graphiques. La bibliothèque AWT et la bibliothèque

Plus en détail

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion HTTP IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin HTTP Introduction et architecture Messages Authentification Conclusion 1 HTTP Introduction et architecture Hypertext Transfert Protocol URI (Uniform

Plus en détail

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet Sécurité Java 2 Première approche L 'internet permet une multiplication des moyens de diffusion des applications. Le courrier électronique, le Web, le FTP sont autant de moyens de distribuer des composants

Plus en détail

18 TCP Les protocoles de domaines d applications

18 TCP Les protocoles de domaines d applications 18 TCP Les protocoles de domaines d applications Objectifs 18.1 Introduction Connaître les différentes catégories d applications et de protocoles de domaines d applications. Connaître les principaux protocoles

Plus en détail

Réseau : Interconnexion de réseaux, routage et application de règles de filtrage.

Réseau : Interconnexion de réseaux, routage et application de règles de filtrage. TD réseau - Réseau : interconnexion de réseau Réseau : Interconnexion de réseaux, routage et application de règles de filtrage. Un réseau de grande importance ne peut pas seulement reposer sur du matériel

Plus en détail

Astuces de dépannage quand problème de scan to folder

Astuces de dépannage quand problème de scan to folder Astuces de dépannage quand problème de scan to folder Si vous ne parvenez pas à transférer des données numérisées vers un dossier, les astuces de dépannage suivantes devraient vous aider à résoudre le

Plus en détail

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Communication inter-processus (IPC) : tubes & sockets exemples en C et en Java F. Butelle F. Butelle, E. Viennet, Système GTR2 IUT Paris 3 Java : implémentation

Plus en détail

Mr. B. Benaissa. Centre universitaire Nâama LOGO

Mr. B. Benaissa. Centre universitaire Nâama LOGO Mr. B. Benaissa Centre universitaire Nâama Dans ce chapitre, nous allons examiner le rôle de la couche application. Nous découvrirons également comment les applications, les services et les protocoles

Plus en détail

TAGREROUT Seyf Allah TMRIM

TAGREROUT Seyf Allah TMRIM TAGREROUT Seyf Allah TMRIM Projet Isa server 2006 Installation et configuration d Isa d server 2006 : Installation d Isa Isa server 2006 Activation des Pings Ping NAT Redirection DNS Proxy (cache, visualisation

Plus en détail

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim

KAJOUT WASSIM INTERNET INFORMATION SERVICES (IIS) 01/03/2013. Compte-rendu sur ISS KAJOUT Wassim 01/03/2013 Le rôle de Serveur Web (IIS) dans Windows Server 2008 R2 vous permet de partager des informations avec des utilisateurs sur Internet, sur un intranet ou un extranet. Windows Server 2008 R2 met

Plus en détail

Installation d'un serveur DHCP sous Windows 2000 Serveur

Installation d'un serveur DHCP sous Windows 2000 Serveur Installation d'un serveur DHCP sous Windows 2000 Serveur Un serveur DHCP permet d'assigner des adresses IP à des ordinateurs clients du réseau. Grâce à un protocole DHCP (Dynamic Host Configuration Protocol),

Plus en détail

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation

Plus en détail

Couche application. La couche application est la plus élevée du modèle de référence.

Couche application. La couche application est la plus élevée du modèle de référence. Couche application La couche application est la plus élevée du modèle de référence. Elle est la source et la destination finale de toutes les données à transporter. Couche application La couche application

Plus en détail

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données Activité sur Meteor Annexe 1 : notion de client-serveur et notion de base de données Notion de client-serveur Que se passe-t-il lorsque vous tapez dans la barre d'adresse de votre navigateur «http://www.google.fr»?

Plus en détail

Stockage du fichier dans une table mysql:

Stockage du fichier dans une table mysql: Stockage de fichiers dans des tables MYSQL avec PHP Rédacteur: Alain Messin CNRS UMS 2202 Admin06 30/06/2006 Le but de ce document est de donner les principes de manipulation de fichiers dans une table

Plus en détail

Assistance à distance sous Windows

Assistance à distance sous Windows Bureau à distance Assistance à distance sous Windows Le bureau à distance est la meilleure solution pour prendre le contrôle à distance de son PC à la maison depuis son PC au bureau, ou inversement. Mais

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068 HTTP/1.1 RFC 2068 1 Caractéristiques Niveau application Sans état Tout transfert de données Au dessus du protocole TCP Largement utilisé dans le World Wide Web Utilise les normes : URI (Uniform Resource

Plus en détail

TP 1 : LES COMMANDES RESEAUX Matière: RESEAUX LOCAUX

TP 1 : LES COMMANDES RESEAUX Matière: RESEAUX LOCAUX TP 1 : LES COMMANDES RESEAUX Matière: RESEAUX LOCAUX Enseignant: Ramzi BELLAZREG 1 La commande PING Cette commande permet de vérifier si un hôte est joignable ou non. Cette commande est basée sur le protocole

Plus en détail

GENERALITES. COURS TCP/IP Niveau 1

GENERALITES. COURS TCP/IP Niveau 1 GENERALITES TCP/IP est un protocole inventé par les créateurs d Unix. (Transfer Control Protocol / Internet Protocole). TCP/IP est basé sur le repérage de chaque ordinateur par une adresse appelée adresse

Plus en détail

Cours admin 200x serveur : DNS et Netbios

Cours admin 200x serveur : DNS et Netbios LE SERVICE DNS Voici l'adresse d'un site très complet sur le sujet (et d'autres): http://www.frameip.com/dns 1- Introduction : Nom Netbios et DNS Résolution de Noms et Résolution inverse Chaque composant

Plus en détail

Réseaux. 1 Généralités. E. Jeandel

Réseaux. 1 Généralités. E. Jeandel 1 Généralités Réseaux Couche Application E. Jeandel Couche application Dernière couche du modèle OSI et TCP/IP Échange de messages entre processus Protocole Un protocole de niveau application doit spécifier

Plus en détail

Microsoft Windows NT Server

Microsoft Windows NT Server Microsoft Windows NT Server Sommaire : INSTALLATION DE WINDOWS NT SERVER... 2 WINNT.EXE OU WINNT32.EXE... 2 PARTITION... 2 FAT OU NTFS... 2 TYPE DE SERVEUR... 2 Contrôleur principal de Domaine (CPD)....

Plus en détail

Cours 14 Les fichiers

Cours 14 Les fichiers Cours 14 Les fichiers F. Gayral 1 Fichier : définition /media/travaux/documents/fgenseignement/java1/courstpsfgfc/14-fichiers/voirtypefichiers Fichier = ensemble d informations codées et stockées sur une

Plus en détail

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM Copyright TECH 2012 Technext - 8, avenue Saint Jean - 06400 CANNES Société - TECHNEXT France - Tel : (+ 33) 6 09 87 62 92 - Fax :

Plus en détail

Auto-évaluation Programmation en Java

Auto-évaluation Programmation en Java Auto-évaluation Programmation en Java Document: f0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INTRODUCTION AUTO-ÉVALUATION PROGRAMMATION EN

Plus en détail

Utilisation d'un réseau avec IACA

Utilisation d'un réseau avec IACA Utilisation d'un réseau avec IACA Réseau IACA composé d'un ou plusieurs serveurs et de station 95 ou 98 ou ME ou NTWS ou 2000 ou XP Pro. Le réseau Le serveur est un ordinateur sur lequel a été installé

Plus en détail

Nmap (Network Mapper) Outil d exploration réseau et scanneur de ports/sécurité

Nmap (Network Mapper) Outil d exploration réseau et scanneur de ports/sécurité Nmap (Network Mapper) Outil d exploration réseau et scanneur de ports/sécurité 1. Présentation Nmap est un outil open source d'exploration réseau et d'audit de sécurité, utilisé pour scanner de grands

Plus en détail

Gestion distribuée (par sockets) de banque en Java

Gestion distribuée (par sockets) de banque en Java Gestion distribuée (par sockets) de banque en Java Université Paris Sud Rappel sur la solution locale de gestion simple de banque L objet de cet exercice était de créer une application java qui implante

Plus en détail

Cisco Certified Network Associate

Cisco Certified Network Associate Cisco Certified Network Associate Version 4 Notions de base sur les réseaux Chapitre 3 01 Quel protocole de la couche application sert couramment à prendre en charge les transferts de fichiers entre un

Plus en détail

But de cette présentation

But de cette présentation Réseaux poste à poste ou égal à égal (peer to peer) sous Windows But de cette présentation Vous permettre de configurer un petit réseau domestique (ou de tpe), sans serveur dédié, sous Windows (c est prévu

Plus en détail

Windows Internet Name Service (WINS)

Windows Internet Name Service (WINS) Windows Internet Name Service (WINS) WINDOWS INTERNET NAME SERVICE (WINS)...2 1.) Introduction au Service de nom Internet Windows (WINS)...2 1.1) Les Noms NetBIOS...2 1.2) Le processus de résolution WINS...2

Plus en détail

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Structure d un programme et Compilation Notions de classe et d objet Syntaxe Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Les messages d erreur d'applidis Client

Les messages d erreur d'applidis Client Fiche technique AppliDis Les messages d erreur d'applidis Client Fiche IS00313 Version document : 1.00 Diffusion limitée : Systancia, membres du programme Partenaires AppliDis et clients ou prospects de

Plus en détail

Sage CRM. 7.2 Guide de Portail Client

Sage CRM. 7.2 Guide de Portail Client Sage CRM 7.2 Guide de Portail Client Copyright 2013 Sage Technologies Limited, éditeur de ce produit. Tous droits réservés. Il est interdit de copier, photocopier, reproduire, traduire, copier sur microfilm,

Plus en détail

ACTIVITÉ DE PROGRAMMATION

ACTIVITÉ DE PROGRAMMATION ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,

Plus en détail

Premiers Pas en Programmation Objet : les Classes et les Objets

Premiers Pas en Programmation Objet : les Classes et les Objets Chapitre 2 Premiers Pas en Programmation Objet : les Classes et les Objets Dans la première partie de ce cours, nous avons appris à manipuler des objets de type simple : entiers, doubles, caractères, booléens.

Plus en détail

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3 Présentation...2 1. Créer un formulaire à partir d une table...3 2. Les contrôles :...10 2.1 Le contrôle "Intitulé"...11 2.2 Le contrôle "Zone de Texte"...12 2.3 Le contrôle «Groupe d options»...14 2.4

Plus en détail

Les réseaux informatiques

Les réseaux informatiques Les réseaux informatiques Support de formation réalisé dans le cadre du convoi Burkina Faso de Septembre 2007 Ce document est largement inspiré de: http://christian.caleca.free.fr/ Table des matières Objectifs......3

Plus en détail

Programmation Réseau. ! UFR Informatique ! 2013-2014. Jean-Baptiste.Yunes@univ-paris-diderot.fr

Programmation Réseau. ! UFR Informatique ! 2013-2014. Jean-Baptiste.Yunes@univ-paris-diderot.fr Programmation Réseau Jean-Baptiste.Yunes@univ-paris-diderot.fr! UFR Informatique! 2013-2014 1 Programmation Réseau Introduction Ce cours n est pas un cours de réseau on y détaillera pas de protocoles de

Plus en détail

Cours CCNA 1. Exercices

Cours CCNA 1. Exercices Cours CCNA 1 TD3 Exercices Exercice 1 Enumérez les sept étapes du processus consistant à convertir les communications de l utilisateur en données. 1. L utilisateur entre les données via une interface matérielle.

Plus en détail

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting IUT Bordeaux 1 2005-2006 Département Informatique Licence Professionnelle ~ SI TD Objets distribués n 3 : Windows XP et Visual Studio.NET Introduction à.net Remoting Partie 1 : l'analyseur de performances

Plus en détail

Installation de Windows 2003 Serveur

Installation de Windows 2003 Serveur Installation de Windows 2003 Serveur Introduction Ce document n'explique pas les concepts, il se contente de décrire, avec copies d'écran, la méthode que j'utilise habituellement pour installer un Windows

Plus en détail

http://www.jdl68160.com/informatique/yawcam.htm

http://www.jdl68160.com/informatique/yawcam.htm Date de publication: le 11/05/2013 Date de modification le : 19/05/2013-20:45 Edition de la version PDF le 20/05/2013 Yawcam est un petit logiciel gratuit, mais très complet, permettant de diffuser/d'enregistrer

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Netissime. [Sous-titre du document] Charles

Netissime. [Sous-titre du document] Charles [Sous-titre du document] Charles Sommaire I. Commandez votre sauvegarde en ligne 2 II. Installation 3-7 III. Utilisation du logiciel de sauvegarde en ligne 8-19 A. Fonctionnement de l application de protection

Plus en détail

ETI/Domo. Français. www.bpt.it. ETI-Domo Config 24810150 FR 10-07-144

ETI/Domo. Français. www.bpt.it. ETI-Domo Config 24810150 FR 10-07-144 ETI/Domo 24810150 www.bpt.it FR Français ETI-Domo Config 24810150 FR 10-07-144 Configuration du PC Avant de procéder à la configuration de tout le système, il est nécessaire de configurer le PC de manière

Plus en détail

Résolution des problèmes de connexion XDMCP aux hôtes UNIX et Linux

Résolution des problèmes de connexion XDMCP aux hôtes UNIX et Linux Résolution des problèmes de connexion XDMCP aux hôtes UNIX et Linux Dernière révision : 1er novembre 2011 Remarque : Les informations les plus récentes sont dans un premier temps publiées dans la note

Plus en détail

Dis papa, c est quoi un bus logiciel réparti?

Dis papa, c est quoi un bus logiciel réparti? Dis papa, c est quoi un bus logiciel réparti? Raphael.Marvie@lifl.fr LIFL IRCICA Equipe GOAL Octobre 2006 10. Des sockets aux bus logiciels répartis 1 0. Une application répartie 2 Objectif Découvrir la

Plus en détail

SERVEUR DE MESSAGERIE

SERVEUR DE MESSAGERIE CRÉEZ VOTRE SERVEUR DE MESSAGERIE avec: version 4.3-B248 Sommaire PREAMBULE et REMERCIEMENTS Page 2 INTRODUCTION Page 2 AVERTISSEMENT Page 3 INSTALLATION Page 3 CONFIGURATION Page 12 CLIENT DE MESAGERIE

Plus en détail

Manuel d installation Version Evolution réseau Ciel Compta Ciel Gestion commerciale Ciel Associations

Manuel d installation Version Evolution réseau Ciel Compta Ciel Gestion commerciale Ciel Associations Manuel d installation Version Evolution réseau Ciel Compta Ciel Gestion commerciale Ciel Associations Sage activité Ciel 35, rue de la Gare - 75917 PARIS Cedex 19 Tél. 01.55.26.33.33 - Fax. 01.55.26.40.33

Plus en détail

Présentation du modèle OSI(Open Systems Interconnection)

Présentation du modèle OSI(Open Systems Interconnection) Présentation du modèle OSI(Open Systems Interconnection) Les couches hautes: Responsables du traitement de l'information relative à la gestion des échanges entre systèmes informatiques. Couches basses:

Plus en détail

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. Encapsulation L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets. La visibilité dépend des membres : certains membres peuvent être visibles et d'autres

Plus en détail

Formateurs : Jackie DAÖN Franck DUBOIS Médiapôle de Guyancourt

Formateurs : Jackie DAÖN Franck DUBOIS Médiapôle de Guyancourt Client sur un domaine stage personnes ressources réseau en établissement janvier 2004 Formateurs : Jackie DAÖN Franck DUBOIS Médiapôle de Guyancourt Lycée de Villaroy 2 rue Eugène Viollet Le Duc BP31 78041

Plus en détail

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe

Plus en détail

Dynamic Host Configuration Protocol

Dynamic Host Configuration Protocol Dynamic Host Configuration Protocol 1 Position du problème Lorsque vous connectez une machine à un réseau Ethernet TCP/IP, cette machine, pour fonctionner correctement, dois disposer de : - une adresse

Plus en détail

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs Utilisation des classes de PourCGI par Michel Michaud, version 2002-11-23 Les fichiers PourCGI.h et PourCGI.cpp rendent disponibles deux classes et une fonction libre qui permettent de faire facilement

Plus en détail

LES ACCES ODBC AVEC LE SYSTEME SAS

LES ACCES ODBC AVEC LE SYSTEME SAS LES ACCES ODBC AVEC LE SYSTEME SAS I. Présentation II. SAS/ACCESS to ODBC III. Driver ODBC SAS IV. Driver ODBC SAS Universel V. Version 8 VI. Références I. Présentation Introduction ODBC, qui signifie

Plus en détail

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii WebDAV en 2 minutes le but affirmé du groupe de travail WebDAV (DAV) est (pour ses concepteurs) de "définir les extensions de HTTP nécessaires pour assurer la disponibilité d'outils WEB de création collective

Plus en détail

GUIDE DE DÉMARRAGE RAPIDE

GUIDE DE DÉMARRAGE RAPIDE GUIDE DE DÉMARRAGE RAPIDE Bienvenue dans SugarSync. Ce guide explique comment installer SugarSync sur votre ordinateur principal, configurer vos dossiers à synchroniser dans le cloud SugarSync. et utiliser

Plus en détail

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6 Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6 1 BERNIER François http://astronomie-astrophotographie.fr Table des matières Installation d un serveur HTTP (Hypertext Transfer

Plus en détail

Un ordonnanceur stupide

Un ordonnanceur stupide Un ordonnanceur simple Université Paris Sud L objet des exercices qui suivent est de créer un ordonanceur implantant l algorithme du tourniquet ( round-robin scheduler ). La technique utilisée pour élire

Plus en détail

Services Réseaux - Couche Application. TODARO Cédric

Services Réseaux - Couche Application. TODARO Cédric Services Réseaux - Couche Application TODARO Cédric 1 TABLE DES MATIÈRES Table des matières 1 Protocoles de gestion de réseaux 3 1.1 DHCP (port 67/68)....................................... 3 1.2 DNS (port

Plus en détail

Traitement de données

Traitement de données Traitement de données Présentation du module TINI Présentation du module : Le module Tini se décline en plusieurs versions, il est constitué d une carte d application et d un module processeur : Les modules

Plus en détail

Installation d un serveur DHCP sous Gnu/Linux

Installation d un serveur DHCP sous Gnu/Linux ROYAUME DU MAROC Office de la Formation Professionnelle et de la Promotion du Travail Installation d un serveur DHCP sous Gnu/Linux DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC Installation

Plus en détail

Sur un ordinateur exécutant Windows 2000 Server Ayant une adresse IP statique

Sur un ordinateur exécutant Windows 2000 Server Ayant une adresse IP statique Le DNS DNS = Domain Name Service Sert à résoudre les noms d ordinateur en adresse IP. Contention de dénomination pour les domaines Windows 2000 (nommage des domaines W2K) Localisation des composants physiques

Plus en détail

TeamViewer 9 Manuel Management Console

TeamViewer 9 Manuel Management Console TeamViewer 9 Manuel Management Console Rév 9.2-07/2014 TeamViewer GmbH Jahnstraße 30 D-73037 Göppingen www.teamviewer.com Sommaire 1 A propos de la TeamViewer Management Console... 4 1.1 A propos de la

Plus en détail

Protocoles réseaux. Abréviation de Binary Digit. C'est la plus petite unité d'information (0, 1).

Protocoles réseaux. Abréviation de Binary Digit. C'est la plus petite unité d'information (0, 1). Chapitre 5 Protocoles réseaux Durée : 4 Heures Type : Théorique I. Rappel 1. Le bit Abréviation de Binary Digit. C'est la plus petite unité d'information (0, 1). 2. L'octet C'est un ensemble de 8 bits.

Plus en détail

La VOIP :Les protocoles H.323 et SIP

La VOIP :Les protocoles H.323 et SIP La VOIP :Les protocoles H.323 et SIP PLAN La VOIP 1 H.323 2 SIP 3 Comparaison SIP/H.323 4 2 La VOIP Qu appelle t on VOIP? VOIP = Voice Over Internet Protocol ou Voix sur IP La voix sur IP : Le transport

Plus en détail

Chapitre : Les Protocoles

Chapitre : Les Protocoles Chapitre : Les Protocoles Outils de l Internet Joyce El Haddad DU1 MI2E Université Paris Dauphine 2009-2010 1 Plan 1. Le modèle TCP/IP 2. Les adresses IP 3. Le Protocole IP 4. Le Protocole TCP 5. Les Protocoles

Plus en détail

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date : 2014-05-29

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date : 2014-05-29 FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date : 2014-05-29 FOIRE AUX QUESTIONS Confidentiel Titre du document : Monetico

Plus en détail

BIND : installer un serveur DNS

BIND : installer un serveur DNS BIND : installer un serveur DNS Cet article a pour but de vous présenter comment installer et configurer un serveur DNS en utilisant l'application BIND. Je supposerai que vous disposez d'un réseau local

Plus en détail

Network musical jammin

Network musical jammin Network musical jammin Projet PC2R - 2015 Pour ce projet, nous allons réaliser une application permettant d effectuer des jams sessions en temps-réel entre des musiciens répartis à travers le monde. Le

Plus en détail

Flux de données Lecture/Ecriture Fichiers

Flux de données Lecture/Ecriture Fichiers Flux de données Lecture/Ecriture Fichiers 1 Un flux de données est un objet qui représente une suite d octets d un programme pour une certaine destination ou issus d une source pour un programme flux d

Plus en détail

GRETA SISR1 TP Installation et mise en place d un serveur FTP sous Windows Server 2013

GRETA SISR1 TP Installation et mise en place d un serveur FTP sous Windows Server 2013 Sommaire Application 1 : Serveur FTP sous Windows 2003... Préambule... Mise en place dus erveur FTP... Mise en place du client FTP... Application 2 : Serveur FTP sous XP avec Typsoft FTP Préambule Je vérifie

Plus en détail

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères FORMATION PcVue Mise en œuvre de WEBVUE Journées de formation au logiciel de supervision PcVue 8.1 Lieu : Lycée Pablo Neruda Saint Martin d hères Centre ressource Génie Electrique Intervenant : Enseignant

Plus en détail

Protection des protocoles www.ofppt.info

Protection des protocoles www.ofppt.info ROYAUME DU MAROC Office de la Formation Professionnelle et de la Promotion du Travail Protection des protocoles DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC Sommaire 1. Introduction... 2

Plus en détail

et Groupe Eyrolles, 2006, ISBN : 2-212-11747-7

et Groupe Eyrolles, 2006, ISBN : 2-212-11747-7 Tsoft et Groupe Eyrolles, 2006, ISBN : 2-212-11747-7 OEM Console Java OEM Console HTTP OEM Database Control Oracle Net Manager 6 Module 6 : Oracle Enterprise Manager Objectifs Contenu A la fin de ce module,

Plus en détail

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. RMI Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. Méthode proche de RPC. Outils et classes qui rendent l'implantation d'appels de méthodes d'objets distants aussi simples

Plus en détail

L annuaire et le Service DNS

L annuaire et le Service DNS L annuaire et le Service DNS Rappel concernant la solution des noms Un nom d hôte est un alias assigné à un ordinateur. Pour l identifier dans un réseau TCP/IP, ce nom peut être différent du nom NETBIOS.

Plus en détail