Programmation Rseaux Illustration : Les Sockets en Java - PowerPoint PPT Presentation

1 / 89
About This Presentation
Title:

Programmation Rseaux Illustration : Les Sockets en Java

Description:

Mode de communication qu'un h te tablit avec un autre h te. qui fournit un service ... Identification de la machine qui abrite le serveur par le client ... – PowerPoint PPT presentation

Number of Views:455
Avg rating:3.0/5.0
Slides: 90
Provided by: xmou
Category:

less

Transcript and Presenter's Notes

Title: Programmation Rseaux Illustration : Les Sockets en Java


1
Programmation RéseauxIllustration Les Sockets
en Java
  • Anne-Marie Déry

À travailler seuls
Concepts généraux
Mise en uvre Java
2
De RMI aux Sockets
Les stubs en RMI gèrent la communication
Réseaux Le transfert de données sur le
réseau oui mais COMMENT ? Et pourquoi RMI nest
pas toujours satisfaisant ???
3
Stubs et encodage des paramètres
4
RMI Architecture client serveur
Mode de communication quun hôte établit avec un
autre hôte qui fournit un service quelconque
Serveur
opération
Client
send request
application
send reply
protocole dapplication  
5
Comment cela fonctionne au niveau du réseau
  • Rôle du stub
  • Identification de la machine qui abrite le
    serveur par le client
  • Identification du serveur sur la machine
  • Canal de communication entre le serveur et le
    client
  • Construction de la trame réseau
  • Echange du protocole dapplication

6
Exemples d applications
Classiques Serveur de Messages Serveur de
news Sockets Serveur de fichiers Applicati
ons distribuées RMI Réservation de
voyages Serveurs de vente Composants
distribués. EJBs
7
Besoins dune application Client-Serveur
Similitudes avec un appel téléphonique via un
standard
1. Trouver ladresse du serveur trouver le no
de téléphone de lentreprise 2. Demander un
service spécifique sadresser à un service ou
une personne précise de lentreprise (no de
poste) 3. Faire la requête 4. Obtenir une
réponse
Adresse dun serveur ? Identification dun
service ?
8
Un peu de vocabulaire
Client entité qui fait l appel Sockets moyen
de communication entre ordinateurs Adresses IP
adresse dun ordinateur Serveur entité qui
prend en charge la requête Serveur de noms (DNS,
LDAP) correspondances entre noms logiques et
adresses IP (Annuaire) Port canal dédié à un
service Protocole langage utilisé par 2
ordinateurs pour communiquer entre eux
9
Adresse Internet et Port
Adresse internet attribuée à chaque nud du
réseau série d octets dont la valeur dépend du
type de réseau associée à un nom logique (Domain
Name Server) Chaque hôte possède environ 65535
ports Port canal dédié à un service
spécifique 80 pour le service http 25 pour le
service SMTP TCP implique une file dattente par
connexion UDP implique une file dattente unique
pour le port
10
Exemples d adresses Internet
157.169.9.15 oscar.essi.fr oscar 157.169.20.5
accueil.essi.fr accueil 157.169.20.4
compta.essi.fr compta 157.169.25.201
www-local.essi.fr www-local 157.169.10.222
pcprofs.essi.fr pcprofs 157.169.4.50
ada.essi.fr ada 157.169.10.120
macserver.essi.fr macserver 157.169.10.240
demo.essi.fr demo 157.169.1.20 bibli.essi.fr
bibli 157.169.25.110 sfe-srv.essi.fr sfe-srv
sfe 157.169.1.153 bde.essi.fr
bde 157.169.3.204 niv1a.essi.fr
niv1a 157.169.1.155 dessi.essi.fr
dessi 157.169.10.2 jessica.essi.fr jessica
print2
ypcat hosts sous linux
11
Exemples d adresses
157.169.25.200 news-srv.essi.fr news-srv
www.essi.fr www-srv.essi.fr
news 134.59.132.21 dolphin.unice.fr 157.169.10.
1 essi2.essi.fr loghost essi2
Essi 157.169 I3S 134.59 serveurs
25 Administration 1 .
12
Ports réservés
1 à 1024 services fondamentaux (administrateurs) (
sous unix cf. le fichier /etc/services, ypcat
services) 1025 à 5000 disponibles pour les
utilisateurs
TCP Serveur FTP 21 Serveur Telnet
23 Serveur SMTP 25
UDP Agent SNMP 161 Logger SNMP 162 .
Serveur multi processus
Applications transactionnelles
13
Sockets ?
Outil de communication pour échanger des données
entre un client et un serveur
Canaux de communication (descripteur dentrée
sortie dans lesquels on écrit et sur lesquels on
lit) Gestion similaire des entrées sorties
standard (écran, clavier) et des fichiers
14
Un socket une entrée sortie dédiée au réseau
Gestion similaire des entrées sorties standard
(écran, clavier) et des fichiers En sortie (ex.
System.out) java.io.PrintStream (ou
PrintWriter) utilise un flot dirigé vers une
sortie java.io.OutputStream En entrée (ex.
System.in) java.io.InputStream (ou
BufferedReader) ATTENTION aux méthodes
deprecated
15
Plus précisément un socket
Plusieurs types de sockets pour la
communication par flot de données - fortement
connectée - synchrone - type
client-serveur pour communication réseau par
message - en mode datagramme - en mode
déconnecté pour communication réseau par
diffusion
16
Contexte modèle OSI
Couche Transport pour transporter les données
en mode connecté Transmission Control
Protocol en mode déconnecté User Datagram
Protocol
Mode connecté vs mode non connecté rester en
ligne pour demander plusieurs services ou
rappeler lentreprise pour chaque nouvelle
requête
Couche communication pour connecter 2 machines
distantes Internet Protocol
17
Exemples dapplications
  • Un exemple le service SMTP
  • Un serveur dEcho
  • Gestion simultanément de plusieurs clients (
    ligne non occupée)
  • Demande de citations une communication à base
    de messages
  • Diffusion de citations Communication Multicast
    (réunion téléphonique)

18
Sockets en Java ?
BSD sockets UNIX au dessus de TCP ou UDP
Une infrastructure puissante et flexible pour la
programmation réseau
En Java toutes les classes relatives aux
sockets sont dans le package java.net
19
Le Package net
  • Des Exceptions
  • Des entrées Sorties
  • Des Sockets
  • ...

Plusieurs hiérarchies de classes
20
Des types de Sockets
Object
ServerSocket HttpAwareServerSocket
DatagramSocket MulticastSocket
Socket HttpSendSocket WrappedSocket
21
Des exceptions
Exception IOException SocketException Prot
ocolException UnknownHostException UnknownS
erviceException BindException ConnectException

22
Des Entrées Sorties
Object
InputStream FileInputStream SocketInputStream
OutputStream FileOutputStream SocketOutputStream
23
Autres Classes
Object InetAdress DatagramPacket SocketImpl
PlainSocketImpl
24
Java.net.InetAddress nommage
La classe InetAddress 2 constructeurs un par
défaut qui crée une adresse vide (cf la méthode
accept sur Socket) un qui prend le nom de la
machine hôte et ladresse IP de la machine. Des
accesseurs en lecture pour récupérer ladresse
IP dune machine (getByName, getAllByName), des
informations sur la machine hôte (getLocalHost,
getLocalAddress, getLocaName) Des comparateurs
égalité (equals) et type dadresse
(isMulticastAddress) ..
25
Les sockets pour RMI
  • Communication Client Serveur traditionnelleFortem
    ent connectée

26
Flot de requêtes du client vers le serveur
Serveur
opération
Client
Ouvrir connexion
req1
application
req2
req3
reqn
Fermer la connexion
27
Scénario dun serveur
Créer le socket d  entrée
Attente de données sur le flux d 
entrée Réception et Analyse des données en
entrée Calcul Construction de la réponse Ecriture
sur le flux de sortie
Fermer le socket d entrée
28
Scénario dun client
Créer le socket d entrée
Préparer la requête l envoyer sur le flux de
sortie Attendre des données sur le flux d 
entrée les lire et les traiter
Fermer le socket d entrée
29
TCP et Sockets
2 classes Socket et ServerSocket (java.net
package)
30
Transfert de données
  • Connexion Marshalling

31
Ouvrir un socket demander à se Connecter
Dans un client identifier la machine à
laquelle on veut se connecter et le numéro de
port sur lequel tourne le serveur implique de
créer un socket pour cette communication
32
Comment ouvrir un socket ? Se connecter
Dans un client Socket myClient try
myClient new Socket("Machine
name", PortNumber)
catch (IOException e)
System.out.println(e) Machine name
machine à laquelle on veut se connecter
PortNumber port sur lequel tourne le serveur (gt
1023)
33
Dans un serveur ?Accepter les connexions
Créer un objet socket pour écouter les demandes
de connexion sur le numéro de port associé au
service Créer un objet socket pour accepter une
connexion d un client cet objet servira pour
tous les transferts d information de ce client
vers le serveur
34
Dans un serveur ?Accepter les connexions
ServerSocket myService try
myService new ServerSocket(PortNumber)
catch (IOException
e) System.err.println(e) Création dun objet
socket pour écouter et accepter les connexions
des clients Socket clientSocket null
try clientSocket myService.accept()
catch (IOException e)
System.err.println(e)
35
Comment recevoir de l information ?
Côté client on doit recevoir une réponse du
serveur Côté serveur on doit lire la requête du
client 1 Créer un flux d entrée pour le socket
et lire l information sur le flux 2
Reconstituer les données émises ( entiers,
doubles, caractères, objets) à partir des lignes
de texte reçues
36
Créer un Input Stream?
Côté client pour recevoir une réponse du
serveur try input new DataInputStream(myClient
.getInputStream()) catch (IOException e)
System.out.println(e) DataInputStream lire
des lignes de texte, des entiers, des doubles,des
caractères... ( read, readChar, readInt,
readDouble, and readLine,. )
37
Côté Serveur
pour recevoir les données dun
client DataInputStream input try input new
DataInputStream(clientSocket.getInputStream())
catch (IOException e) System.out.println(e)

38
Comment envoyer une information ?
Côté client pour envoyer une requête au
serveur Côté serveur pour envoyer une réponse
au client 1 Créer un flux de sortie pour le
socket pour écrire linformation 2 Constituer
le contenu des données à émettre (transformer
entiers, doubles, caractères, objets en lignes
de texte)
39
Comment créer un Output Stream?
Côté client pour envoyer une information au
serveur (PrintStream ou DataOutputStream) PrintS
tream output try output new
PrintStream(myClient.getOutputStream() catch
(IOException e) System.err.println(e) PrintStr
eam pour afficher des valeurs des types de
base (write et println) ..
40
Côté Serveur
Pour envoyer des informations au
client PrintStream output try output new
PrintStream(clientSocket.getOutputStream())
catch (IOException e) System.out.println(e)
DataOutputStream écrire des types de données
primitifs (writeBytes) output new
DataOutputStream(clientSocket.getOutputStream())

41
Comment se déconnecter ?
Fermer correctement les flux dentrée sortie et
les sockets en cause. Côté client Côté
serveur
42
Comment fermer un socket ?
Fermer les output et input stream avant le
socket. Côté client output.close()
input.close() myClient.close() Côté
serveur output.close()
input.close() clientSocket.close()
myService.close()

43
Comment écrire un client ?
Toujours 4 étapes Ouvrir un socket.
Ouvrir un input et un output stream sur le
socket. Lire et écrire sur le socket
en fonction du
protocole du serveur. Effacer Fermer
Seule létape 3 change selon le serveur visé
44
Sockets (Communication Client serveur)
Le serveur est à lécoute des requêtes sur un
port particulier Un client doit connaître lhôte
et le port sur lequel le serveur écoute. Le
client peut tenter une connexion au serveur
Le serveur connecte le client sur un nouveau no
de port et reste en attente sur le port
original Client et serveur communiquent en
écrivant et lisant sur un socket
45
Client SMTP (Simple Mail Transfer Protocol),
import java.io. import java.net. public
class smtpClient public static void
main(String args) Socket smtpSocket
null // le socket client
DataOutputStream os null // output stream
DataInputStream is null // input stream
try smtpSocket new Socket("hostname", 25)
os new DataOutputStream(smtpSocket.getO
utputStream()) is new
DataInputStream(smtpSocket.getInputStream())
catch (UnknownHostException e)
System.err.println("Don't know about host
hostname") catch (IOException e)
System.err.println("Couldn't get I/O for
the connection to hostname")

46
Le protocole SMTP, RFC1822/3
if (smtpSocket ! null os ! null is !
null) tryos.writeBytes("HELO\n")
os.writeBytes("MAIL From pinna_at_essi.fr\n")
os.writeBytes("RCPT To pinna_at_essi.fr\n")
os.writeBytes("DATA\n")
os.writeBytes("From pinna_at_essi.fr\n")
os.writeBytes("Subject Qui est là ?\n")
os.writeBytes("Vous suivez toujours ?\n") //
message os.writeBytes("\n.\n")
os.writeBytes("QUIT")

47
SMTP
// attente de "Ok" du serveur SMTP, String
responseLine while ((responseLine
is.readLine()) ! null)
System.out.println("Server " responseLine)
if (responseLine.indexOf("Ok") ! -1)
break os.close() is.close()
smtpSocket.close() catch
(UnknownHostException e) System.err.println(
"Trying to connect to unknown host " e)
catch (IOException) System.err.println("IOEx
ception " e)
.
48
Serveur Echo
Un serveur similaire à echo ( port 7). Reçoit
un texte du client et le renvoie identique Le
serveur gère un seul client.
49
Déclarations
import java.io. import java.net. public class
echo3 public static void main(String args)
ServerSocket echoServer null
String line DataInputStream is
PrintStream os Socket clientSocket null
try echoServer new ServerSocket(9999)
catch (IOException e) System.out.println(e)

50
try clientSocket echoServer.accept()
is new DataInputStream(clientSocket.getInput
Stream()) os new PrintStream(clientSocket
.getOutputStream()) while (true)
line is.readLine()
os.println(line) catch
(IOException e) System.out.println(e
)
51
TCP et Sockets
La classe Socket une batterie de
constructeurs par défaut, no de port adresse
/ nom de machine et service distante, no de
port adresse locale, créent un socket en mode
Stream ou DataGramme des accesseurs en lecture
no de port et adresse à laquelle il est
connecté, no de port et adresse à laquelle il est
lié, input et output Stream associés (getPort,
getInetAddress, getLocalPort, getLocalAddress,
getInputStream, getOutputStream) des méthodes
close ...
52
TCP et Sockets
La classe ServerSocket des constructeurs par
défaut, no de port associé, taille de la liste
de clients en attente adresse... des
accesseurs en lecture no de port sur lequel le
socket écoute, adresse à laquelle il est connecté
(getPort, getInetAddress, ) des méthodes
accept pour accepter une communication avec un
client, close ...
53
Applications distribuées et parallèlisme
  • La communication ne doit pas rester bloquée pour
    un client

54
Plusieurs clients
Serveur
Client1
Ouvrir connexion
application
S1
Client2
application
S2
Clientn
Sn
application
55
Plusieurs Clients
Utiliser des threads pour accepter plusieurs
clients simultanément. Le serveur gère un
thread par client

56
Quelques mots sur les Threads
Un thread permet lexécution dun programme. Une
application peut avoir de multiples threads qui
s exécutent concurremment (Chaque thread a une
priorité). Chaque thread a un nom. Plusieurs
threads peuvent avoir le même. Le nom est généré
si non spécifié. Il y a 2 façons de créer un
nouveau thread dexécution. déclarer une sous
classe de Thread et surcharger la méthode run.
Une instance de la sous classe peut alors être
allouée et démarrer. déclarer une classe qui
implémente Runnable et donc la méthode run. Une
instance de la classe peut être allouée, passée
comme argument à la création dun thread et
démarrée.
57
Un thread qui calcule des primes
class PrimeThread extends Thread
long minPrime PrimeThread(long
minPrime) this.minPrime
minPrime public void run()
// compute primes larger than
minPrime . . .
PrimeThread p new PrimeThread(143)
p.start()
58
Version2
class PrimeRun implements Runnable
long minPrime PrimeRun(long minPrime)
this.minPrime minPrime
public void run() //
compute primes larger than minPrime
. . . PrimeRun p new
PrimeRun(143) new Thread(p).start()
59
Ce que RMI ne sait pas vraiment faire ?
  • Communication asynchrone par messages
  • Communication par diffusion

60
Communication par message Envoi de datagrammes
Serveur
opération
Client
req1
application
rep1
reqn
repn
61
Exemple
Un serveur de citation qui écoute un socket type
datagram et envoie une citation si le client le
demande Un client qui fait simplement des
requêtes au serveur ATTENTION Plusieurs
firewalls et routeurs sont configurés pour
interdire le passage de paquets UDP
62
Scénario dun serveur
Créer le socket d entrée
Création d un paquet d entrée Attente de
données en entrée Réception et Analyse des
données en entrée Calcul Création dun paquet de
sortie Préparation et Envoi de la réponse
Fermer le socket d entrée
63
Scénario dun client
Créer le socket d entrée
Créer un paquet de sortie Préparer et Envoyer
une requête Créer un paquet d entrée Attendre
des données en entrée les recevoir et les
traiter
Fermer le socket d entrée
64
Datagrammes UDP et Sockets
Datagramme un message indépendant envoyé sur le
réseau arrivée, temps darrivée et contenu non
garantis
2 classes DatagramPacket et DatagramSocket
packages dimplémentation de communication via
UDP de datagrammes
65
Classe DatagramSocket
Des constructeurs par défaut, no port
Adresse Inet Des accesseurs en lecture adresse
à laquelle le socket est lié, est connecté, le
no port auquel il est lié, connecté, taille du
buffer reçu ou envoyé (getInetAddress,
getLocalAddress, getPort, getLocalPort,
getReceivedBufferSize, getSendBufferSize) Des
méthodes pour se connecter à une adresse, pour
se déconnecter, pour envoyer un paquet
datagramme, pour un recevoir un paquet
datagramme (connect, disconnect, send, receive)
66
Classe DatagramPacket
Des constructeurs buffer longueur de buffer
adresse destination port Des accesseurs en
lecture adresse à laquelle le paquet est
envoyé, le no port à laquelle le paquet est
envoyé, la donnée transmise (getAddress,
getPort, getData, getLength)
67
Une Application Client Serveur
Le serveur reçoit en continu des paquets mode
datagramme sur un socket un paquet reçu une
demande de citation dun client le serveur
envoie en réponse un paquet qui contient une
ligne "quote of the moment" Lapplication
cliente envoie simplement un paquet datagramme au
serveur indiquant quil souhaite recevoir une
citation et attend en réponse un paquet du
serveur.
68
La classe QuoteServer
import java.io. public class QuoteServer
public static void main(String args)
throws IOException new
QuoteServerThread().start()
la classe QuoteServerThread implémente toute la
logique du serveur.
69
La classe QuoteServerThread
public QuoteServerThread() throws IOException
this("QuoteServer") public
QuoteServerThread(String name) throws IOException
super(name) socket
new DatagramSocket(4445) Création dun
DatagramSocket sur le port 4445 qui permet au
serveur de communiquer avec tous ces clients try
in new BufferedReader(new FileReader("one-line
rs.txt")) catch (FileNotFoundExcepti
on e) System.err.println("Couldn't open
quote file. " "Serving time instead.")
Le constructeur ouvre aussi un
BufferedReader sur un fichier qui contient une
liste de citations ( une citation par ligne)
70
La méthode RUNimplémentation du thread
contient une boucle qui tant quil y a des
citations dans le fichier attend larrivée d un
DatagramPacket correspondant à une requête client
sur un DatagramSocket. Byte buf new
byte256 DatagramPacket packet new
DatagramPacket(buf, buf.length) socket.receive(p
acket) En réponse une citation est mise dans un
DatagramPacket et envoyée sur le DatagramSocket
au client demandeur. String dString null if
(in null) dString new Date().toString() els
e dString getNextQuote() buf
dString.getBytes() InetAddress address
packet.getAddress() int port
packet.getPort() packet new
DatagramPacket(buf, buf.length, address, port)
socket.send(packet)
71
Suite
Adresse Internet numéro de port (issus du
DatagramPacket ) identification du client pour
que le serveur puisse lui répondre Larrivée du
DatagramPacket implique une requête -gtcontenu
du buffer inutile Le constructeur utilisé pour
le DatagramPacket un tableau doctets
contenant le message et la taille du tableau
Ladresse Internet et un no de port.
Lorsque le serveur a lu toutes les citations on
ferme le socket de communication.
socket.close()
72
La classe QuoteClient
envoie une requête au QuoteServer, attend la
réponse et affiche la réponse à lécran.
Variables utilisées int port
InetAddress address DatagramSocket
socket null DatagramPacket packet
byte sendBuf new byte256 Le client a
besoin pour s exécuter du nom de la machine sur
laquelle tourne le serveur if (args.length ! 1)
System.out.println("Usage java
QuoteClient lthostnamegt") return


73
La partie principale du main
Création d un DatagramSocket DatagramSocket
socket new DatagramSocket() Le constructeur
lie le Socket à un port local libre Le programme
envoie une requête au serveur byte buf new
byte256 InetAddress address
InetAddress.getByName(args0) DatagramPacket
packet new DatagramPacket(buf, buf.length,
address, 4445)
socket.send(packet) Ensuite le client récupère
une réponse et laffiche
74
Communication par diffusion Multicast
Serveur
Client1
application
Gr
Client2
application
Clientn
application
75
Ouvrir un socket demander à se Connecter
Les clients demandent seulement à joindre un
groupe
76
Exemple de multicast
Un serveur de citation qui envoie une citation
toutes les minutes à tous les clients qui
écoutent (multicast)
77
Scénario dun serveur
Créer le socket d entrée
Créer un paquet de sortie Préparer et Envoyer une
donnée

Fermer le socket d entrée
78
Scénario dun client
Créer le socket d entrée
Création d un paquet d entrée Attente de
données en entrée Réception et traitement des
données en entrée
Fermer le socket d entrée
79
Classe MulticastServer
Des constructeurs par défaut, port à
utiliser Des accesseurs en lecture adresse du
groupe (getInterface) Des méthodes pour
envoyer un paquet datagramme, pour joindre ou
quitter un groupe (send, joinGroup, leaveGroup)
80
Multicast MulticastSocket
Type de socket utilisé côté client pour écouter
des paquets que le serveur  broadcast  à
plusieurs clients. . Une extension du
QuoteServer broadcast à intervalle régulier à
tous ses clients Le serveur a un nouveau nom et
crée un MulticastServerThread qui contient le
cur du serveur. import java.io.
public class MulticastServer
public static void main(String args) throws
IOException new
MulticastServerThread().start()

81
public class MulticastServerThread extends
QuoteServerThread ...
utilisation du constructeur par héritage et
héritage de variables et de la méthode
getNextQuote
82
Une nouvelle méthode RUN
public void run() while
(moreQuotes) try byte buf
new byte256 // don't wait
for request...just send a quote String
dString null if (in
null) dString new Date().toString()
else dString getNextQuote()
buf dString.getBytes()
InetAddress group InetAddress.getByName("
230.0.0.1") DatagramPacket
packet packet new
DatagramPacket(buf, buf.length, group, 4446)
socket.send(packet) try
sleep((long)Math.random() FIVE_SECONDS)
catch (InterruptedException
e) catch (IOException e)
e.printStackTrace()
moreQuotes false
socket.close()
83
Différences principales
Le DatagramPacket est construit à partir de de
 ladresse de plusieurs clients  L adresse et
le no de port sont câblés no de port 4446 (tout
client doit avoir un MulticastSocket lié à ce
no). Ladresse InetAddress "230.0.0.1"
correspond à un identificateur de groupe et non
à une adresse Internet de la machine dun
client Le DatagramPacket est destiné à tous les
clients qui écoutent le port 4446 et qui sont
membres du groupe "230.0.0.1".
84
Un nouveau Client
Pour écouter le port 4446, le programme du client
doit créer son MulticastSocket avec ce no. Pour
être membre du groupe "230.0.0.1" le client
adresse la méthode joinGroup du MulticastSocket
avec ladresse didentification du groupe.
Le serveur utilise un DatagramSocket pour faire
du broadcast à partir de données du client sur un
MulticastSocket. Il aurait pu utiliser aussi un
MulticastSocket. Le socket utilisé par le serveur
pour envoyer le DatagramPacket nest pas
important. Ce qui est important pour le broadcast
est dadresser linformation contenue dans le
DatagramPacket, et le socket utilisé par le
client pour lécouter.
85
MulticastSocket socket new MulticastSocket(4446
) InetAddress group
InetAddress.getByName("230.0.0.1")
socket.joinGroup(group) DatagramPacket
packet for (int i 0 i lt 5 i)
byte buf new byte256
packet new DatagramPacket(buf, buf.length)
socket.receive(packet) String received
new String(packet.getData())
System.out.println("Quote of the Moment "
received) socket.leaveGroup(g
roup) socket.close()

86
Synthèse
Client
Serveur
I/O Stream
I/O Stream
TCP aSocket aServerSocket connecté write read
read write UDP aDatagramSocket aDatagramSo
cket non connecté send receive receive send
Multicast aMulticastSocket aDatagramSocket/
aMulticastSocket receive send
aDatagramPacket
87
Définir un nouveau type de socket
Pourquoi ? Préparer les données avant de les
envoyer Préparer les données reçues Exemple Jav
a RMI Sockets spécialisées (marshalling et
unmarshalling) Images Compression et
Décompression Comment ? En spécialisant les
classes de base
88
Comment Définir un nouveau type de Sockets
La classe CompressionSocket et ses classes
relatives 4 étapes 1. Etendre
java.io.FilterOutputStream pour créer un output
stream pour ce type de Socket. Surcharge de
méthodes si nécessaire. 2. Etendre
java.io.FilterInputStream 3. Etendre
java.net.Socket . Implémenter les constructeurs
appropriés et surcharger getInputStream,
getOutputStream et close. 4. Etendre
java.net.ServerSocket Implémenter le
constructeur et surcharger accept pour créer un
socket du bon type.
89
Conclusion
Une large bibliothèque pour traiter les sockets
et différents types de communication entre
Clients et Serveurs dans Java Une extension
naturelle par abstraction à lappel de méthodes
à distance - Java RMI et une normalisation Corba
avec lintégration dun ORB et maintenant les
EJB Entreprise Java Beans et JINI ..
Write a Comment
User Comments (0)
About PowerShow.com