100% ont trouvé ce document utile (1 vote)
162 vues6 pages

Application Client/Serveur UDP Factoriel

Le document décrit deux applications client-serveur basées sur les sockets UDP. La première calcule le factoriel d'un nombre envoyé par le client. La seconde permet l'échange de messages entre deux threads en utilisant les sockets UDP.

Transféré par

louey.saadallah
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
162 vues6 pages

Application Client/Serveur UDP Factoriel

Le document décrit deux applications client-serveur basées sur les sockets UDP. La première calcule le factoriel d'un nombre envoyé par le client. La seconde permet l'échange de messages entre deux threads en utilisant les sockets UDP.

Transféré par

louey.saadallah
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

ISTIC TP

Systèmes Répartis

TP 3: Socket UDP

Application 1: Calcul Factoriel

Ecrire une application Client/Serveur basée sur les Sockets UDP:


 Le client envoie un entier vers le serveur.
 Le serveur vérifie s’il s’agit bien d’un entier positif. Si c’est bien le cas, il fait le
calcul du factoriel et transmet le résultat vers le client. Sinon, il lui demande de
retransmettre un autre entier en envoyant la chaîne "Veuillez entrer un nombre
positif ! ".
 Le client peut faire autant de tentatives jusqu’à l’envoi d’un nombre valide. A la
réception du résultat désiré, le client ferme le socket.
1ère Méthode : conversion entier -> String

import [Link];
import [Link];
import [Link];
import [Link];

public class Serveur {


public static void main(String[] args){
try{ InetAddress a=[Link]();
DatagramSocket se=new DatagramSocket();
DatagramSocket sr=new DatagramSocket(2021);
while(true) {
byte[] buffer=new byte[2];
DatagramPacket pr=new DatagramPacket(buffer,
[Link]);
[Link](pr);
String S= new String(buffer);
[Link]("entier reçu :"+S);
int n=[Link](S);
String be;
int f=1 ;
if(n>0)
{for(int i=1 ;i<=n ;i++)
{f=f*i;
}
be=[Link](f);
[Link]("résulat :"+f);
int l=[Link]();
byte[] b=new byte[l];
b=[Link]();
DatagramPacket pe=new DatagramPacket(b,[Link],a,2020);

Page 1
ISTIC TP
Systèmes Répartis

[Link](pe);
[Link]();
[Link]();
break ;
}
else
{
be="Veuillez entrer un nombre positif ! " ;
int l=[Link]();
byte[] b=new byte[l];
b=[Link]();
DatagramPacket pe=new DatagramPacket(b,[Link],a,2020);
[Link](pe);
}

}catch(IOException e) {}

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class Client {


public static void main(String[] args){
try{ InetAddress a=[Link]();
Scanner sc=new Scanner([Link]);
DatagramSocket se=new DatagramSocket();
DatagramSocket sr=new DatagramSocket(2020);
while(true) {
byte[] buffer=new byte[100];
DatagramPacket pr=new DatagramPacket(buffer, [Link]);
int n=[Link]();
String be=[Link](n);
int l=[Link]();
byte[] b=new byte[l];
b=[Link]();
DatagramPacket pe=new DatagramPacket(b,[Link],a,2021);
[Link](pe);
[Link](pr);
String S= new String(buffer);

if(![Link]("Veuillez entrer un nombre positif ! "))


{
[Link](n+"!= "+S);
[Link]();
[Link]();
break;
}
[Link](S);
}
}catch(IOException e) {}

Page 2
ISTIC TP
Systèmes Répartis

2ème Méthode : conversion entier -> tableau de byte.


La première méthode nous impose d’envoyer un entier de taille deux caractères, sinon on aura
un disfonctionnement qu’on peut surmonter en utilisant les flux de tableau de bytes
ByteArray[Input/Output]Stream et les flux de types primitifs Java ( int, char, boolean, double,
long, byte, float, short) Data[Input/Output]Stream en suivant le même principe que la
conversion instance d’objet-> tableau de byte .

import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class Serveur {


public static void main(String[] args){
try{ InetAddress a=[Link]();
DatagramSocket se=new DatagramSocket();
DatagramSocket sr=new DatagramSocket(2021);
while(true) {
byte[] buffer=new byte[100];
DatagramPacket pr=new DatagramPacket(buffer, [Link]);
[Link](pr);
ByteArrayInputStream bStream = new ByteArrayInputStream(buffer);
DataInputStream oo = new DataInputStream(bStream);
int n=[Link]();
[Link]();

double f=1 ;
if(n>0)
{for(int i=1 ;i<=n ;i++)
{f=f*i;
}
String s=f+"";
[Link]("résulat :"+f);
int l=[Link]();
byte[] b=new byte[l];
b=[Link]();
DatagramPacket pe=new DatagramPacket(b,[Link],a,2020);
[Link](pe);
[Link]();
[Link]();
break ;
}
else
{
String s="Veuillez entrer un nombre positif ! " ;
int l=[Link]();
byte[] b=new byte[l];
b=[Link]();
DatagramPacket pe=new DatagramPacket(b,[Link],a,2020);

Page 3
ISTIC TP
Systèmes Répartis

[Link](pe);
}

}catch(IOException e) {}

}
}
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];

public class Client {


public static void main(String[] args){
try{ InetAddress a=[Link]();
Scanner sc=new Scanner([Link]);
DatagramSocket se=new DatagramSocket();
DatagramSocket sr=new DatagramSocket(2020);

while(true) {
byte[] buffer=new byte[100];
DatagramPacket pr=new DatagramPacket(buffer, [Link]);
int n=[Link]();
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
DataOutputStream oo = new DataOutputStream(bStream);
[Link](n);
[Link]();

byte[] b = [Link]();
DatagramPacket pe=new DatagramPacket(b,[Link],a,2021);
[Link](pe);
[Link](pr);
String S= new String(buffer);

if(![Link]("Veuillez entrer un nombre positif ! "))


{
[Link](n+"!= "+S);
[Link]();
[Link]();
break;

}
[Link](S);
}

}catch(IOException e) {}

Page 4
ISTIC TP
Systèmes Répartis

Application 2: Socket UDP et Thread

Ecrire une application basée sur les sockets UDP permettant d’échanger des messages. Les
deux extrémités doivent être toujours prêtes à envoyer et recevoir des messages
indépendamment.

public class E1 {
public static void main(String [] args)
{
int portE=2020;
int portL =2021;
ThreadE e= new ThreadE (portE);
[Link]();
ThreadL l=new ThreadL(portL);

[Link]();}}

public class E2 {
public static void main(String [] args)
{
int portE=2021;
int portL =2020;
ThreadE e= new ThreadE (portE);
[Link]();
ThreadL l=new ThreadL(portL);
[Link]();}}

import [Link];
import [Link];
import [Link];
import [Link];

public class ThreadE extends Thread{


int p;
ThreadE(int port){p=port;}
public void run(){
Scanner sc=new Scanner ([Link]);
DatagramSocket ds;
try {
ds = new DatagramSocket();
while(true)
{String s=[Link]();
int l=[Link]();
byte[]B=new byte[l];
B=[Link]();
DatagramPacket dp=new DatagramPacket(B,l,[Link](),p);
[Link](dp);}
} catch (Exception e) {
[Link]();

Page 5
ISTIC TP
Systèmes Répartis

}}}

import [Link];
import [Link];

public class ThreadL extends Thread{


int p;
ThreadL(int port){p=port;}
public void run(){
DatagramSocket ds;
try {
ds = new DatagramSocket(p);
while(true)
{
byte[]b=new byte[100];
DatagramPacket dp=new DatagramPacket (b, [Link]);
[Link](dp);
String s= new String(b);
[Link](s);}
} catch (Exception e) {
[Link]();

}}}

Page 6

Vous aimerez peut-être aussi