Développement d’application client/serveur

Preview:

Citation preview

Développement d’application Développement d’application client/serveurclient/serveur

Zouhair ELHADARIwww.hadari.jimdo.com

Centre de BTS Dakhla

2ème année BTS DSI

Chapitre 5Chapitre 5Programmation réseau en JAVAProgrammation réseau en JAVAProgrammation réseau en JAVAProgrammation réseau en JAVA

2ème année BTS DSI Prof:EL HADARI zouhair 2

Partie 2:Partie 2:La programmation réseau enLa programmation réseau enLa programmation réseau enLa programmation réseau en

mode nonmode non--connectéconnecté(UDP) (UDP)

2ème année BTS DSI Prof:EL HADARI zouhair 3

Utilisation des sockets Datagrams

Quelles classes utiliser ?

il faut utiliser les classes DatagramPacket et DatagramSocketDatagramSocket

Ces objets sont initialisés différemment selon qu’ils sont utilisés pour envoyer ou recevoir des paquets

2ème année BTS DSI Prof:EL HADARI zouhair 4

Envoi d’un Datagram

1. créer un DatagramPacket en spécifiant :

les données à envoyer

leur longueur

la machine réceptrice et le port la machine réceptrice et le port

2ème année BTS DSI Prof:EL HADARI zouhair 5

2. utiliser la méthode send(DatagramPacket) de DatagramSocket

pas d’arguments pour le constructeur car toutes les

Envoi d’un Datagram

pas d’arguments pour le constructeur car toutes les informations se trouvent dans le paquet envoyé

2ème année BTS DSI Prof:EL HADARI zouhair 6

//Machine destinataire

InetAddress address = InetAddress.getByName(" site.com ");

int PORT = 4562;

//Création du message à envoyer

byte[] emessage = (new String(" Message à envoyer ")).getBytes();

//Initialisation du paquet avec toutes les informations

DatagramPacket paquet = new DatagramPacket(message,message.lenght,DatagramPacket paquet = new DatagramPacket(message,message.lenght,

address,PORT);

//Création du socket et envoi du paquet

DatagramSocket socket = new DatgramSocket();

socket.send(paquet);

//Fermeture du socket

socket.close();

2ème année BTS DSI Prof:EL HADARI zouhair 7

Réception d’un Datagram

1. créer un DatagramSocket qui écoute sur le port de la machine du destinataire

2. créer un DatagramPacket pour recevoir les paquets envoyés par le serveur

2. créer un DatagramPacket pour recevoir les paquets envoyés par le serveur

3. utiliser la méthode receive() de DatagramPacket

2ème année BTS DSI Prof:EL HADARI zouhair 8

//Définir un buffer de réception

byte[ ] buffer = new byte[1024];

//On associe un paquet à un buffer vide pour la réception

DatagramPacket paquet =new DatagramPacket(buffer,buffer.length());

//On crée un socket pour écouter sur le port

DatagramSocket socket = new DatgramSocket(PORT);

while (true) {

//attente de réception

socket.receive(paquet);socket.receive(paquet);

//affichage du paquet reçu

String s = new String(packet.getData(),0,paquet.getLength());

System.out.println(“Paquet reçu : + s);

}

//Fermeture du socket

socket.close();

2ème année BTS DSI Prof:EL HADARI zouhair 9

Mu

ltic

ast

sen

der(

clien

t)

//Machine destinataire

InetAddress addr = InetAddress.getByName(" 237.3.3.1");

//Création du message à envoyer

Byte[ ] data = "un message".getBytes();

//Initialisation du paquet avec toutes les informations

DatagramPacket packet = new DatagramPacket(data, data.length, addr, 1234);

Mu

ltic

ast

sen

der(

clien

t)

//Création du socket Multicast et envoi du paquet

MulticastSocket s = new MulticastSocket();

s.send(packet,(byte)1);

//Fermeture du socket

s.close();

2ème année BTS DSI Prof:EL HADARI zouhair 10

Mu

ltic

ast

Rece

iver(

serv

eu

r)

//Définir un buffer de réception

byte[ ] buffer = new byte[1024];

//On associe un paquet à un buffer vide pour la réception

DatagramPacket packet = new DatagramPacket(buffer,buffer.lenght);

//On crée un socket Multicast pour écouter sur le port

MulticastSocket s = new MulticastSocket(1234);

//Joindre un groupe multicast

s.joinGroup(InetAddress.getByName("237.3.3.1");

//Réception du packet

s.receive(packet);

Mu

ltic

ast

Rece

iver(

serv

eu

r)

s.receive(packet);

System.out.println("from: " + packet.getAddress());

System.out.println("Message: " + packet.getData());

//Laisser le groupe multicast

s.leaveGroup(InetAddress.getByName(" 237.3.3.1 "));

//Fermeture du socket

s.close();

2ème année BTS DSI Prof:EL HADARI zouhair 11

Conversion Object <-> byte[]

Pour émettre et recevoir n'importe quel objet via des sockets UDP

En écriture : conversion de Object en byte[ ]

ByteArrayOutputStream byteStream =

new ByteArrayOutputStream();new ByteArrayOutputStream();

ObjectOutputStream objectStream =

new ObjectOutputStream(byteStream);

objectStream.writeObject(object);

byte[ ] byteArray = byteStream.toByteArray();

2ème année BTS DSI Prof:EL HADARI zouhair 12

En lecture : conversion de byte[] en Object

ByteArrayInputStream byteStream =

new ByteArrayInputStream(byteArray);new ByteArrayInputStream(byteArray);

ObjectInputStream objectStream =

new ObjectInputStream(byteStream);

object = objectStream.readObject();

2ème année BTS DSI Prof:EL HADARI zouhair 13

Fin du Fin du 22èmeème partiepartie

2ème année BTS DSI Prof:EL HADARI zouhair 14

Recommended