Upload
others
View
12
Download
1
Embed Size (px)
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