21
IFT1025: Programmation 2 Internet Jian-Yun Nie

IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Embed Size (px)

Citation preview

Page 1: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

IFT1025: Programmation 2

Internet

Jian-Yun Nie

Page 2: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Concepts

• Communication sur l’Internet

• Connexion dans Java

Page 3: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Internet

• Stockage de données (informations)– Serveur– Client

• Connexion– Connexion entre un client et un serveur– Un canal de communication

• Transmission– Protocole:

• définit les commandes• le format de données transmises

Page 4: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Schéma de communication typique

• Serveur:– Il est lancée, en attente de recevoir un message (commande)

• Client– Demande à établir une connexion avec le serveur– Transmet une commande au serveur

• Serveur– Reçoit la commande– Traite la commande– Renvoie la réponse

• Client– Reçoit la réponse– Continue à traiter , transmet une autre commande, …

Page 5: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Établir une connexion

• Identifier l’adresse du serveur à laquelle envoyer une requête de connexion

• Adresse:– Adresse IP (Internet Protocol): 4 octets (4 entier 0-255)– 130.65.86.66

• Domain Naming Service (DNS): le nom correspondant à une adresse IP– Ss_domaine. sous_domaine . domaine– java.sun.com, www.iro.umontreal.ca– Traduction de DNS en adresse IP: par un serveur DNS

• Serveur– Prêt à recevoir des requêtes des types préétablis– E.g. GET

Page 6: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Transmission de données

• Transmettre caractère par caractère– Lent, inefficace

• Par paquet (package)– Un tampon pour accumuler les données– Quand il est rempli, envoyer (et vider)

– Plus efficace

Page 7: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Contrôle de transmission

• TCP/IP:– IP:

• s’occupe de découper les données en paquets, les envoyer

– TCP: Transmission Control Protocol • Contrôle le bon fonctionnement de la transmission• Un paquet est-il envoyé et reçu correctement ?

Sinon, renvoyer le paquet

Page 8: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Communication entre client et serveur

• Server:– Reçoit une requête:

• Adresse IP du client• Commande

– Déterminer la réponse– Envoyer la réponse à l’adresse IP– Prêt à recevoir une autre commande

• Client– Envoie une requête au serveur– Attend à recevoir une réponse (ou un message

d’erreur)

Page 9: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Protocole

• Un serveur est établi pour communiquer selon un protocole

• Canal de communication (no. de port)– 0 and 65,535 – HTTP: par défaut: 80

• Serveur Web: prêt à recevoir les requêtes HTTP:– Adresse d’un document:

• Uniform Resource Locator (URL) • java.sun.com/index.html

– Commande– GET /index.html HTTP/1.0 (suivie d’une ligne blanche)– http://java.sun.com/index.html

Page 10: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Protocole HTTP Command Meaning• GET Return the requested item• HEAD Request only the header

information of an item• OPTIONS Request communications

options of an item• POST Supply input to a server-side

command and return the result• PUT Store an item on the server• DELETE Delete an item on the server• TRACE Trace server communication

Page 11: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Interprétation de la donnée

• HTTP– Interprète les commande– N’interprète pas les données

• Navigateur– Interprète les données reçues– HTML: format de données

Page 12: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

En Java• Établir une connexion avec un serveur Web

– Créer un socket entre Client et Serveur– Socket s = new Socket(hostname, portnumber); – Socket s = new Socket("java.sun.com", 80);

Page 13: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

En Java

• Obtenir les streams du SocketInputStream instream = s.getInputStream();

OutputStream outstream = s.getOutputStream();

• Caster les streams Scanner in = new Scanner(instream);

PrintWriter out = new PrintWriter(outstream);

• Fermer le sockets.close();

Page 14: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Scanner

• Implente iterator:– boolean hasNext()– String next()

Page 15: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Exemple (BigJava)

• Un programme pour obtenir une page web– Établir une connexion avec un serveur– Envoyer une requête– Recevoir la réponse– Fermer

java WebGet java.sun.com / – Lancer WebGet avec 2 paramètres:

• java.sun.com: DNS• /: page racine• Port par défaut: 80

Page 16: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

01: import java.io.InputStream;02: import java.io.IOException;03: import java.io.OutputStream;04: import java.io.PrintWriter;05: import java.net.Socket;06: import java.util.Scanner;07:

14: public class WebGet15: {16: public static void main(String[] args) throws

IOException17: {19: 20: String host;21: String resource;22: 23: if (args.length == 2)24: {25: host = args[0];26: resource = args[1];27: }28: else29: {30: System.out.println("Getting / from

java.sun.com");31: host = "java.sun.com";32: resource = "/";33: }34:

37: final int HTTP_PORT = 80;38: Socket s = new Socket(host, HTTP_PORT);39: 42: InputStream instream = s.getInputStream();43: OutputStream outstream =

s.getOutputStream();44: 47: Scanner in = new Scanner(instream);48: PrintWriter out = new

PrintWriter(outstream); 49: 52: String command = "GET " + resource + "

HTTP/1.0\n\n";53: out.print(command);54: out.flush();55: 58: while (in.hasNextLine())59: {60: String input = in.nextLine();61: System.out.println(input);62: }63: 66: s.close(); 67: }68: }

Page 17: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Résultat: java WebGetHTTP/1.1 200 OKServer: Sun-Java-System-Web-Server/6.1Date: Tue, 28 Mar 2006 20:07:26 GMTContent-type: text/html;charset=ISO-8859-1Set-Cookie: SUN_ID=132.204.24.63:218361143576446; EXPIRES=Wednesday, 31-Dec-2025 23:59:59 GMT; DOMAIN=.sun.com; PATH=/Set-cookie: JSESSIONID=519A024C45B4C300DA868D076CA33448;Path=/Connection: close

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Java Technology</title><meta name="keywords" content="Java, platform" /><meta name="collection" content="reference"><meta name="description" content="Java technology is a portfolio of products that are based on the power of networks and the idea that the same software shouldrun on many different kinds of systems and devices." /><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/><meta name="date" content="2006-03-23" />…

Page 18: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Créer un serveur Web

• Choisir un port non utilisé: e.g. 8888• Construire un socket serveur:

– ServerSocket server = new ServerSocket(8888);

• Faire accepter les commande– Socket s = server.accept(); – BankService service = new BankService(s, bank);

• BankService(s, bank) – une classe créée localement pour donner des

services (répondre aux requêtes reçues sur le socket s

Page 19: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Exemple: BankService

• BankService carries out the service • Implements the Runnable interface • Its run method will be executed in each thread that serves a client

connection • run gets a scanner and writer from the socket, then executes:

public void doService() throws IOException{ while (true) { if (!in.hasNext()) return; String command = in.next(); if (command.equals("QUIT")) return; executeCommand(command); }}

Page 20: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Exemple01: import java.io.InputStream;02: import java.io.IOException;03: import java.io.OutputStream;04: import java.io.PrintWriter;05: import java.net.Socket;06: import java.util.Scanner;07: 08: /**09: Executes Simple Bank Access Protocol

commands10: from a socket.11: */12: public class BankService implements Runnable13: {14: /**15: Constructs a service object that processes

commands16: from a socket for a bank.17: @param aSocket the socket18: @param aBank the bank19: */20: public BankService(Socket aSocket, Bank aBank)21: {22: s = aSocket;23: bank = aBank;24: }

26: public void run()27: {28: try29: {30: try31: {32: in = new Scanner(s.getInputStream());33: out = new

PrintWriter(s.getOutputStream());

34: doService(); 35: }36: finally37: {38: s.close();39: }40: }41: catch (IOException exception)42: {43: exception.printStackTrace();44: }45: }

Page 21: IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java

Exemple51: public void doService() throws IOException52: { 53: while (true)54: { 55: if (!in.hasNext()) return;56: String command = in.next();57: if (command.equals("QUIT")) return;

58: else executeCommand(command);59: }60: }61:

89: private Socket s;90: private Scanner in;91: private PrintWriter out;92: private Bank bank;93: }

63: Executes a single command.64: @param command the command to execute65: */66: public void executeCommand(String command)67: {68: int account = in.nextInt();69: if (command.equals("DEPOSIT"))70: {71: double amount = in.nextDouble();72: bank.deposit(account, amount);73: }74: else if (command.equals("WITHDRAW"))75: {76: double amount = in.nextDouble();77: bank.withdraw(account, amount);78: } 79: else if (!command.equals("BALANCE"))80: {81: out.println("Invalid command");82: out.flush();83: return;84: }85: out.println(account + " " + bank.getBalance(account));86: out.flush();87: }