Vous êtes sur la page 1sur 30

Interfaces graphiques  Java

IUT informatique des Cézeaux  SI 2012/2013

Olivier Goutet
o.goutet@openium.fr

1 mars 2013

1 / 30
Plan

Images

Réseau

2 / 30
java.awt.Image

• Vue image
• Gère les formations GIF, JPEG, PNG, ...
• Images statiques
• Images dynamiques

3 / 30
java.awt.Image

4 / 30
Ouverture d'une image

BufferedImage img = null ;


try {
img = ImageIO . read ( new File ( " strawberry . jpg " ));
} catch ( IOException e ) {
e . printStracktrace ();
}

5 / 30
BueredImage

• Permet d'accéder à un pixel de l'image


◦ int getRGB(int x, int y)
• Pouquoi un int ?

6 / 30
BueredImage

• Permet d'accéder à un pixel de l'image


◦ int getRGB(int x, int y)

7 / 30
Achage d'une image

try {
BufferedImage img = null ;
img = ImageIO . read ( new File ( " strawberry . jpg " ));
ImageIcon icon = new ImageIcon ( img );

JLabel label = new JLabel ( icon );


// Ajouter le label dans l ' interface

} catch ( IOException e ) {
e . printStacktrace ();
}

8 / 30
TP

• Questions sur le TP ?

9 / 30
Plan

Images

Réseau

10 / 30
Java et réseau

• Raison d'être de java


• Découpé en deux parties
◦ java.net
• Sockets
◦ java.rmi
• Remote Method invocation

11 / 30
Sockets

• Interface de programmation réseau bas niveau


• Envoi de données entre applications
• Les classes de java.net rendent facile la communication
• Streams
◦ Lecture / écriture chier <=> réseau

12 / 30
Sockets

• Socket
◦ Avec connexion et sécurité de transmission
◦ Téléphone (TCP)
• DatagramSocket
◦ Pas de connexion, pas d'ordre d'arrivée garanti
◦ La poste (UDP)
• MulticastSocket
◦ DatagramSocket multicast

13 / 30
Client / Serveur

• Serveur
◦ Attends les connexions sur un port
◦ accept() les connexions
• Créée une socket par client.
◦ java.net.ServerSocket
◦ Un seul objet ServerSocket

14 / 30
Client / Serveur

Learning Java 2nd edition  O'Reilly  Pat Neiemeyer & Jonathan Knudsen

15 / 30
Client / Serveur

• Crée une socket


• Se connecte à un serveur

try {
Socket sock1 = new Socket ( " openium . fr " ,25);
Socket sock2 = new Socket ( " 91.121.54.191 " ,25);
} catch ( UnknownHostException e ){
System . out . println ( " On ne trouve pas le serveur " );
} catch ( IOException e ){
System . out . println ( " Impossible de se connecter " );
}

16 / 30
Exemple de client
try {
Socket server = new Socket ( " openium . fr " , 1234);
InputStream in = server . getInputStream ( );
OutputStream out = server . getOutputStream ( );

PrintWriter pout = new PrintWriter ( out , true );


pout . println ( " Hello server ! " );

out . write (42);


byte someByte = ( byte ) in . read ( );

BufferedReader bin =
new BufferedReader ( new InputStreamReader ( in ) );
String response = bin . readLine ( );

server . close ( );
} catch ( IOException e ) { ... }
17 / 30
Exemple de serveur
try {
ServerSocket listener = new ServerSocket ( 1234 );
while ( ! finished ) {
Socket client = listener . accept ( );

InputStream in = client . getInputStream ( );


OutputStream out = client . getOutputStream ( );

BufferedReader bin = new BufferedReader ( new InputStreamReader ( in ));


String someString = bin . readLine ( );

byte someByte = ( byte ) in . read ( );


out . write ( someByte +2);

PrintWriter pout = new PrintWriter ( out , true );


pout . println ( " Goodbye !" );
client . close ( );
}
listener . close ( );
} catch (...)
18 / 30
Exemple : serveur http

• Construire un serveur Web


◦ Retourne les chiers qu'on lui demande
◦ Multithread
• GET /chemin/fichier

19 / 30
Exemple : serveur http

public class TinyHttpd {

public static void main ( String argv [] )


throws IOException {
ServerSocket ss = new ServerSocket (
Integer . parseInt ( argv [0]));
while ( true ) {
new Thread ( new TinyHttpdConnection ( ss . accept ()))
. start ();
}
}
}

20 / 30
Exemple : serveur http (1)
class TinyHttpdConnection implements Runnable {
Socket client ;
TinyHttpdConnection ( Socket client ) throws SocketException {
this . client = client ;
}
public void run ( ) {
try {
BufferedReader in = new BufferedReader (
new InputStreamReader ( client . getInputStream () , " 8859 _1 " ));
OutputStream out = client . getOutputStream ( );
PrintWriter pout = new PrintWriter (
new OutputStreamWriter ( out , " 8859 _1 ") , true );
String request = in . readLine ( );
System . out . println ( " Request : "+ request );
// Traitement
client . close ( );
} catch ( IOException e ) {
System . out . println ( "I/ O error " + e ); }
}
}
21 / 30
Exemple : serveur http (2)

Matcher get = Pattern . compile (" GET /?(\\ S *).* " ). matcher ( request );
if ( get . matches ( ) ) {
request = get . group (1);
if ( request . endsWith ("/") || request . equals ("" ) )
request = request + " index . html " ;
try {
FileInputStream fis = new FileInputStream ( request );
byte [] data = new byte [ 64*1024 ];
for ( int read ; ( read = fis . read ( data )) > -1; ){
out . write ( data , 0, read );
}
out . flush ( );
} catch ( FileNotFoundException e ) {
pout . println ( " 404 Object Not Found " ); }
} else {
pout . println ( " 400 Bad Request " );
}

Learning Java 2nd edition  O'Reilly  Pat Neiemeyer & Jonathan Knudsen
22 / 30
8859_1 ?

• Encodage de caractères
• Issu de la Requests For Comments (RFC) HTTP
◦ (http ://www.ietf.org/rfc/rfc2616.txt)
• Uniquement de l'ascii
• Tous les serveurs doivent la respecter

23 / 30
Types de sockets

• TCP (Socket) s'occupe de tout


◦ L'ordre
◦ L'intégrité
◦ Connexion
• Pas UDP...

24 / 30
DatagramSocket (UDP)

• Inconvénients
◦ Les données n'arrivent pas toujours
◦ Pas toujours dans le bon ordre
◦ En double
• Avantages
◦ Rapide

25 / 30
Client SocketDatagram

byte [] data = message . getBytes ( );


InetAddress addr = InetAddress . getByName ( myHost );
DatagramPacket pack =
new DatagramPacket ( data , data . length , addr , myPort );
DatagramSocket ds = new DatagramSocket ( );
ds . send ( pack );
ds . close ( );

26 / 30
Server SocketDatagram

DatagramSocket s = new DatagramSocket ( port );


while ( true ) {
DatagramPacket packet =
new DatagramPacket ( new byte [1024] , 1024);
s . receive ( packet );
String message = new String ( packet . getData ( ) );
System . out . println ( " message from : "
+ packet . getAddress ( ). getHostName ( )
+ " - " + message );
}

27 / 30
Exercice

• Transmettre de requêtes d'un client à un serveur


• Executer cette requête sur le serveur
• Retourner le résultat via le réseau

28 / 30
Exercice

• Le client envoie
◦ Un objet de type requête
• Le client reçoit
◦ Le résultat de la requête
• Le serveur reçoit
◦ Un objet de type requête
• Le serveur renvoie
◦ Le résultat de la requête

29 / 30
Exercice
public class Request implements java . io . Serializable {}
public class DateRequest extends Request {}

public abstract class WorkRequest extends Request {


public abstract Object execute ( );
}
public class AuCarre extends WorkRequest {
int n ;

public AuCarre ( int n ) {


this . n = n ;
}
public Object execute ( ) {
return new Integer ( n * n );
}
}

Learning Java 2nd edition  O'Reilly  Pat Neiemeyer & Jonathan Knudsen
30 / 30

Vous aimerez peut-être aussi