• Aucun résultat trouvé

public static void main(string args[]) throws IOException { InetAddress serveur = InetAddress.getByName(hote);

N/A
N/A
Protected

Academic year: 2022

Partager "public static void main(string args[]) throws IOException { InetAddress serveur = InetAddress.getByName(hote);"

Copied!
6
0
0

Texte intégral

(1)

Département d’Informatique Année d’étude: Master 1

Module : Programmation distribuée

Année universitaire : 2019/2020

TP2 : Les Sockets

Exercice 1.

1. Tester les exemples de base suivants sur une seule machine « localhost ». Lancer d’abord le serveur, puis le client : vous aurez deux fenêtres de sorties console sur lesquelles vous pouvez tester et voir si vos messages sur le côté client arrivent et s’affichent sur le serveur.

Attention : pour les deux cas de sockets TCP ou UDP, les ports de connexion côté client et côté serveur doivent être le même.

Exemple 1 : sockets UDP

// Code côté client import java.io.IOException;

import java.net.*;

import java.util.Scanner;

public class ClientUDP {

public static void main(String args[]) throws IOException {

String hote = "localhost";

int port =1000, taille = 1024;

byte[] messageEnvoye = new byte[taille];

InetAddress serveur = InetAddress.getByName(hote);

System.out.println("Donner un message à transmettre");

Scanner sc = new Scanner(System.in);

messageEnvoye = sc.nextLine().getBytes();

sc.close();

DatagramSocket soc = new DatagramSocket();

DatagramPacket donneeEnvoye = new DatagramPacket(messageEnvoye, messageEnvoye.length, serveur,port);

soc.send(donneeEnvoye);

soc.close();

}

}

(2)

// Côté Serveur import java.io.*;

import java.net.*;

public class ServeurUDP {

public static void main(String args[]) throws IOException{

int port = 1000, taille = 1024;

byte buffer[] = new byte[taille];

String messageRecu;

DatagramSocket soc = new DatagramSocket(1000);

DatagramPacket donneeRecu = new DatagramPacket(buffer, buffer.length);

System.out.println("serveur active sur port " + port);

while (true) {

soc.receive(donneeRecu);

messageRecu = new String(buffer);

System.out.println("Le client est connecté, le message envoyé = " + messageRecu);

}

} }

Exemple 2: Sockets TCP

// Code côté client

import java.net.*;

import java.io.*;

public class Client {

public static void main(String args[]) throws IOException { String hote = "localhost", messageEnvoye;

int port =1000;

Socket soc = new Socket(hote,port);

OutputStream flux = soc.getOutputStream();

OutputStreamWriter sortie = new OutputStreamWriter(flux);

System.out.println("Donner un message à transmettre");

(3)

BufferedReader entreeDepuisUtilisateur =

new BufferedReader(new InputStreamReader(System.in));

messageEnvoye = entreeDepuisUtilisateur.readLine();

sortie.write(" "+ messageEnvoye);

sortie.flush(); // pour forcer l'envoi à la ligne

soc.close();

} }

// Côté Serveur

import java.io.*;

import java.net.*;

public class Serveur {

public static void main(String args[]) throws IOException{

int port = 1000;

ServerSocket sersoc = new ServerSocket(port);

System.out.println("serveur active sur port " + port);

while (true) {

Socket soc = sersoc.accept();

InputStream flux = soc.getInputStream();

BufferedReader entree = new BufferedReader(new

InputStreamReader(flux));

String message = entree.readLine();

System.out.println("message reçu sur le serveur = " + message);

} }

}

2. Tester les programmes précédents sur deux machines différentes connectés à un réseau local: une machine est « client » et une autre « serveur ».

Exercice 2.

L’objectif de cet exercice est de compter le nombre de clients qui se connectent sur un serveur. Le modèle de communication utilisé est les sockets TCP et le traitement coté serveur est réalisé à l’aide d’un thread.

Soient les deux codes suivants (Serveur.java et Client.java) :

(4)

import java.io.IOException;

import java.net.*;

public class Serveur {

public static void main(String[] args){

ServerSocket socket;

try {

socket = new ServerSocket(2011);

Thread t = new Thread(new Accepter_clients(socket));

t.start();

System.out.println("Mes clients sont prets ");

} catch (IOException e) {}

} }

class Accepter_clients implements Runnable { private ServerSocket socketserver;

private Socket socket;

private int nbrclient = 1;

public Accepter_clients(ServerSocket s){

socketserver = s;

}

public void run(){

try {

while(true){

socket = socketserver.accept(); // attente d'un client System.out.println("Le client numero "+nbrclient+ "

est connecte");

nbrclient++;

socket.close();

}

} catch (IOException e) {}

} }

import java.io.IOException;

import java.net.*;

public class Client {

public static void main(String[] args){

Socket socket;

try {

socket = new Socket("localhost",2011);

socket.close();

} catch (IOException e) {}

} }

(5)

Questions :

1. Lancez le serveur et lancez le client plusieurs fois.

2. Modifiez le code précédent afin de limiter le nombre de clients qui peuvent se connecter à 5.

Exercice 3.

L’objectif de cet exercice est de réaliser une application de tchatche, pour cela nous allons utiliser la bibliothèque swing et les sockets tcp. L’application est réalisée avec une seule classe qui représente à la fois le client est le serveur. Au lancement de l’application la fenêtre JFrame suivante est apparue (combinaison de JLabel, JTextField, JPanel, JTextArea, JRadioButton, …) :

Pour tchatcher il faut lancer deux instances de cette application, une instance pour la première personne qui doit choisir le bouton Serveur et une instance pour la deuxième personne qui doit choisir le bouton Client. A l’intérieur de l’application, on peut trouver un code qui ressemble au suivant :

if (Serveur) {

hostServer = new ServerSocket(port);

socket = hostServer.accept(); // attente client }

else { // si Client

socket = new Socket(“localhost”, port);

}

Avant la connexion du client (2ème personne, on a la vue suivante) :

(6)

Après la connexion du client, les deux personnes peuvent échanger leurs messages :

Questions :

1. Ecrire le programme correspondant

2. Etendre l’application à plusieurs clients (2 clients et un serveur par exemple).

Références

Documents relatifs

public static void main (String[] args) throws IOException {. int port; // no de port

XXX constituerait une requête recevable, « …la suppression du poste décidée par application d’une décision du Conseil Permanent de la Francophonie (CPM) à sa 112 ème

XXX soutient ensuite que la décision de l’OIF de demander au MAE l'annulation de son titre de séjour et ceux des membres de sa famille, telle qu’indiquée dans son message

2.1 L’OIF sollicite en conséquence du TPI voir « faire disparaître toute mention pouvant laisser penser qu’elle aurait réclamé des frais de procédure d’un

Elle demande que cette pièce soit écartée des débats, en indiquant textuellement sous la plume de son conseil : « Il me revient de ma cliente après vérification

public static void main(String [] args) throws IOException{. ServerSocket serveur =

public static void main(String [] args) throws IOException{. ServerSocket serveur =

Compte tenu des tâches à accomplir dans le cadre du soutien psychologique, la demande de mission du 20 novembre fut amendée en date du 18 décembre, afin que le Représentant