M.3.3.2
Programmation Objet Avance
A. El FAKER - 2015
Sockets Java et
rseau
A. El FAKER - 2015
Plan
Paradigme client/serveur
Sockets TCP
Servir plusieurs clients
Adressage
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
Paradigme client/serveur
Clients et serveurs impliquent des services rseau
fournis par la couche de transport
Request
processus serveur
Network
Result
processus client
Transport
(TCP,UDP,)
Pile TCP / IP
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
Paradigme client/serveur
Clients et serveurs impliquent des services rseau
fournis par la couche de transport
Tlphonie
Vitesse de connexion lente
Un nombre important dA/R
A. El FAKER - 2015
Paradigme client/serveur
Clients et serveurs impliquent des services rseau
fournis par la couche de transport
A. El FAKER - 2015
Paradigme client/serveur
TCP ou UDP utilisent des numros de ports pour
mapper les donnes entrantes un service particulier
Ports logiciels
rservs :
app
app
app
app
Port
Port
Port
Port
Transport
(TCP,UDP,)
Packet
ftp
21
tcp
telnet
23
tcp
smtp
25
tcp
http
80
tcp,udp
https
443
tcp,udp
Data
Port#
data
A. El FAKER - 2015
Paradigme client/serveur
La couche de transport utilise le mcanisme de sockets
import java.net.*; import java.io.*;
public class PortScanner {
Ports sur
public static void main(String[] args) {
coute par des
String host = "localhost";
try {
serveurs tcp
InetAddress adr = InetAddress.getByName(host);
for (int i = 1; i < 1024; i++) {
try {
Socket laSocket = new Socket(adr, i);
System.out.println(Il y a un serveur sur le port + i + " de " + host);
}
catch (IOException ex) { // ne doit pas y avoir de serveur sur ce port
}
Il y a un serveur sur le port 21 de localhost
} // end for
Il y a un serveur sur le port 22 de localhost
Il y a un serveur sur le port 23 de localhost
} // end try
catch (UnknownHostException e) { Il y a un serveur sur le port 25 de localhost
Il y a un serveur sur le port 37 de localhost
System.err.println(e);
}} // end main
Leon n3: Sockets Java et rseau Pr. A. El FAKER - 2015 8
}M3.3.2
// end POA
PortScanner
Paradigme client/serveur
Une socket dcrit une extrmit de la connexion entre
deux programmes en cours d'excution sur le rseau
processus client
processus serveur
Socket("128.250.25.158",7654)
ServerSocket(7654)
bytes
Output/write stream
bytes
Input/read stream
A. El FAKER - 2015
Paradigme client/serveur
1
serveur
Server
program
Connection
client
request
Port 0
Port 0
Port 1
Port 1
Port 13
Port 65535
Client
program
Port 65535
A. El FAKER - 2015
10
Paradigme client/serveur
3
serveur
Server
program
Port 0
Port 0
Port 1
Port 1
automatiquement
Port 13
Port 20314
Client
program
Port 8596
Port 65535
Connection
Port 65535
A. El FAKER - 2015
11
Paradigme client/serveur
3
client
Socket("128.250.25.158",7654)
(Input Stream)
Port 7654
(Input Stream)
Server
program
(OutputStream)
Client
program
(OutputStream)
A. El FAKER - 2015
12
Sockets TCP
A. El FAKER - 2015
13
DatagramPacket
DatagramSocket
Object
InetAddress
ServerSocket
java.net.*
Socket
URL
URLConnection
URLEncoder
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
14
Sockets TCP
API
java.net.Socket 1.0
InputStream getInputStream()
OutputStream getOutputStream()
get streams to read data from the socket and write data to the socket
A. El FAKER - 2015
15
Sockets TCP/Client
Client HTTP
String g = "GET / HTTP/1.1\n"+ "Host: www.ensias.ma\n\n";
g : pour rcuprer la page d'index du serveur. Utilise le
protocole HTTP
Socket socket = new Socket("www.ensias.ma", 80);
A. El FAKER - 2015
16
Sockets TCP/Client
Traiter les donnes renvoyes par le serveur
Client HTTP
InputStream in = socket.getInputStream();
byte[] b = new byte[1000];
//effectivement recues
if(nbBitsRecus>0) {
System.out.println(nbBitsRecus + " bits recus.");
System.out.println("Recu: "+
new String(b,0,nbBitsRecus));
}
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
17
Sockets TCP/Client
Rsultat
A. El FAKER - 2015
18
Sockets TCP/Client
1. Crer une socket
Socket client = new Socket(server, port_id);
PrintWriter(client.getOutputStream(),true);
client
Port 8189
(Input Stream)
client
Port 8189
(OutputStream)
A. El FAKER - 2015
19
Sockets TCP/Client
3. Communiquer avec le serveur
Recevoir les donnes partir du serveur :
String line = in.readLine();
4. Fermer la socket
client.close();
Le client peut fonctionner sur tout ordinateur dans le
rseau (LAN, WAN ou Internet) tant quil n'y a pas de
pare-feu qui bloque la communication.
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
20
Sockets TCP/Serveur
API
java.net.ServerSocket 1.0
ServerSocket(int port)
creates a server socket that monitors a port.
Socket accept()
Waits for a connection. This method blocks (that is, idles) the current
thread until the connection is made. The method returns a Socket object
through wich the program can communicate with the connecting client.
void close()
closes the server socket
A. El FAKER - 2015
21
Sockets TCP/Serveur
DateServer.java
public class DateServer {
public static void main(String[] args) throws IOException
{
ServerSocket listener = new ServerSocket(8189);
try {
while (true) {
Socket socket = listener.accept();
try {
PrintWriter out =
new PrintWriter(socket.getOutputStream(),true);
out.println(new Date().toString());
} finally {
socket.close();
}
Il est possible de tester le serveur avec telnet.
}
}
finally { listener.close(); }
}}
M3.3.2 POA Leon n3: Sockets Java et rseau Pr. A. El FAKER - 2015 22
Sockets TCP/Serveur
En gnral : ct serveur
int port_d_ecoute = 8189;
ServerSocket listener = new ServerSocket(port_d_ecoute);
while(true)
{
Socket socket_de_travail = listener.accept();
new ClasseDuTraitement(socket_travail);
}
A. El FAKER - 2015
23
Sockets TCP/Serveur
1. Crer une socket serveur
ServerSocket listener= new ServerSocket( 8189);
new Printwriter(s.getOutputStream(),true
/*autoFlush*/);
A. El FAKER - 2015
24
Sockets TCP/Serveur
4. Communiquer avec le client
Recevoir partir du client:
String line = in.readLine();
Envoyer au client:
out.writeBytes(Hello\n);
5. Fermer la socket
client.close();
Attention : si on ne ferme pas la socket et un autre programme
A. El FAKER - 2015
25
Servir plusieurs
clients
A. El FAKER - 2015
26
connecte au serveur :
Socket s = listener.accept();
A. El FAKER - 2015
27
}
}
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
28
Client 1
Serveur
connexion
Client 2
accept()
accept()
connexion
Thread 1
Cration dun
nouveau
thread
Thread 2
Terminaison
du thread
A. El FAKER - 2015
29
Le constructeur maintient
une rfrence sur la socket
}
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
30
Adressage
A. El FAKER - 2015
31
Adressage
Chercher l'adresse IP de "www.ensias.ma"
API
java.net.InetAddress 1.0
InetAddress.getByName("www.ensias.ma"));
Hte/IP : www.ensias.ma/196.200.135.4
A. El FAKER - 2015
32
Adressage
Chercher l'adresse IP de "www.ensias.ma"
Se fait automatiquement l'aide d'un serveur DNS
Ne signifie pas que l'IP est accessible
A. El FAKER - 2015
33
Adressage
Rcuprer son adresse IP
API
java.net.InetAddress 1.0
InetAddress.getLocalHost());
}}
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
34
Adressage
Mais aussi
API
java.net.InetAddress 1.0
byte[]getAddress()
returns an array of bytes that contains the numerical address.
String getHostAddress()
returns a String with decimal numbers, separated by periods, for
example, "132.163.4.102"
String getHostName()
returns a the host name.
A. El FAKER - 2015
35
Adressage
Chaque interface (carte rseau) peut disposer de
plusieurs adresses IP
adresse IP local (127.0.0.1) localhost
adresse IP rseau (192.168.x.x rseaux maisons)
adresse IP internet
API
Enumeration<NetworkInterface> getNetworkInterfaces()
returns all the network interfaces.
A. El FAKER - 2015
36
Adressage
import java.net.NetworkInterface;
public class TestNetworkInterface {
public static void main(String[] args) throws Exception {
Enumeration<NetworkInterface> lesInterfaces=
NetworkInterface.getNetworkInterfaces();
while (lesInterfaces.hasMoreElements()) {
NetworkInterface interface = lesInterfaces.nextElement();
Enumeration<InetAddress> lesAddresses =
interface.getInetAddresses();
while (lesAddresses.hasMoreElements()) {
InetAddress address = lesAddresses .nextElement();
System.out.println(address.getHostAddress());
} } } }
M3.3.2 POA Leon n3: Sockets Java et rseau Pr.
A. El FAKER - 2015
37
M.3.3.2
Programmation Objet Avance
A. El FAKER - 2015
38