Java serveur multi client
Fermé
rom117
Messages postés
9
Date d'inscription
dimanche 19 octobre 2008
Statut
Membre
Dernière intervention
24 novembre 2009
-
24 nov. 2009 à 01:21
nickybutterfly - 20 févr. 2010 à 14:54
nickybutterfly - 20 févr. 2010 à 14:54
A voir également:
- Serveur multi client java
- Formate pour taxer client frigo vide ✓ - Forum Vos droits sur internet
- Waptrick java football - Télécharger - Jeux vidéo
- Formate pour taxer client sur nourriture - Forum Loisirs / Divertissements
- Formate pour taxer client 500€ - Forum Vos droits sur internet
- Jeux java itel football - Télécharger - Jeux vidéo
2 réponses
rom117
Messages postés
9
Date d'inscription
dimanche 19 octobre 2008
Statut
Membre
Dernière intervention
24 novembre 2009
7
24 nov. 2009 à 01:24
24 nov. 2009 à 01:24
Et Client.java
/*
**** Chat multiclient - M1I 2008 *****
* Client.java
*
*/
// Packages à inclure
import java.net.*;
import java.io.*;
public class Client implements Runnable
{
// Déclaration des attributs de la classe
private int port ;
private String host;
private InetAddress inetAddress ;
Thread t ;
Socket s ;
String login ;
// Déclaration des méthodes
/** Constructeur de la classe Client */
public Client (/*int port*/) //throws IOException
{
//port=getPort();
//s = new Socket (host,port);
}
/** Méthode déclenchée après appel de 't.start()', son rôle consiste à lire et afficher les messages envoyés par le serveur*/
//Il s'agit principalement des messages envoyés par les autres utilisateurs (clients) */
public void run()
{
try
{
while(true)
{
// 1. Récupérer le flux d'entrée de la socket s (méthode getInputStream() de la classe Socket)
InputStream is = s.getInputStream ();
ObjectInputStream ois = new ObjectInputStream (is);
//obj = (Object) msg ;
// 2. Lire le message envoyé par le serveur (méthode bloquante, par exemple : readObject())
Object obj = ois.readObject();
// 3. Convertir l'objet ('Object') reçu en une chaine de caractères ('String')
String msg = (String) obj;
// 4. Afficher la chaine de caractères
System.out.println(msg);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
/** Méthode permettant de lire une chaine de caractères depuis la ligne de commandes */
public String readMessage()throws IOException
{
String s="";
char c;
while ((c=(char)System.in.read())!='\n')
s=s+c;
return s;
}
/** Méthode permettant de se connecter au serveur, de lire les chaines de caractères depuis une ligne de commandes et de les envoyer au serveur. La chaine 'Bye' doit mettre fin à la connexion*/
public void launch()
{
try
{
String msg;
// 1. Créer la socket
System.out.println("Connexion au serveur...");
s = new Socket(getInetAddress(),getPort());
// 2. Lancer le Thread (méthode 'start') permettant de recevoir les réponses du serveur
t = new Thread(this);
t.start();
OutputStream os ;
ObjectOutputStream oos ;
os = s.getOutputStream();
oos = new ObjectOutputStream(os);
oos.writeObject(login);
// 3. Récupérer le flux de sortie de la socket (méthode getOutputStream() de la classe Socket)
do
{
//OutputStream os = s.getOutputStream();
//ObjectOutputStream oos = new ObjectOutputStream(os);
//String msg = "Message du Client";
msg=Lire.S();
System.out.println("Réception des messages en cours... \n");
//Object obj=(Object) msg;
// 4. Ecrire le message sur le flux de sortie de la socket (méthode writeObject());
oos.writeObject(msg);
}
// 5. Mettre fin à la connexion si le message envoyé est 'Bye'
while(!msg.equals("Bye"));
s.close();
System.out.println("Vous êtes deconnecté du serveur");
}
catch(IOException e)
{
System.out.println("Erreur de sérialisation "+e);
}
}
/** Méthode permettant d'introduire le numéro de port surveillé par le serveur */
public void setPort(int p)
{
if(p >0)
{
port=p;
}
}
/** Méthode permettant de retourner le numéro de port du serveur */
public int getPort()
{
return port;
}
/** Méthode permettant de retourner l'adresse IP du serveur */
public InetAddress getInetAddress()
{
return this.inetAddress;//this->pour une variable globale qui aurait le même nom que le paramètre (ici on peut ne pas le mettre)
}
/** Méthode permettant d'introduire le nom ou l'IP du serveur
* @throws UnknownHostException */
public void setInetAddress (String machineName/*InetAddress inetAddress*/) throws UnknownHostException
{
// 'if(inetAddress!='NULL')
// {
try
{
inetAddress=InetAddress.getByName(machineName);
}
catch(Exception e)
{
}
//inetAddress=InetAddress.getLocalHost(); //récupérer l'adresse IP de la machine
// }
}
/** Méthode permettant d'introduire le login de l'utilisateur */
public void getLogin() throws IOException {
System.out.print("Entrer votre login SVP : ");
this.login=readMessage();
}
public void setLogin(String _login){
this.login=_login;
}
//////////////////////////////////////////////////////////////////////////////////////////////
// Méthode principale : 'main'
//
// Le programme prendra 2 paramètres : une adresse ou un nom de serveur, un numéro de port.
//
//////////////////////////////////////////////////////////////////////////////////////////////
public static void main(String[] arg) throws UnknownHostException, IOException
{
Client em = new Client();
em.setInetAddress("localhost");
em.setPort(9999);
em.getLogin();
em.launch();
}
}
/*
**** Chat multiclient - M1I 2008 *****
* Client.java
*
*/
// Packages à inclure
import java.net.*;
import java.io.*;
public class Client implements Runnable
{
// Déclaration des attributs de la classe
private int port ;
private String host;
private InetAddress inetAddress ;
Thread t ;
Socket s ;
String login ;
// Déclaration des méthodes
/** Constructeur de la classe Client */
public Client (/*int port*/) //throws IOException
{
//port=getPort();
//s = new Socket (host,port);
}
/** Méthode déclenchée après appel de 't.start()', son rôle consiste à lire et afficher les messages envoyés par le serveur*/
//Il s'agit principalement des messages envoyés par les autres utilisateurs (clients) */
public void run()
{
try
{
while(true)
{
// 1. Récupérer le flux d'entrée de la socket s (méthode getInputStream() de la classe Socket)
InputStream is = s.getInputStream ();
ObjectInputStream ois = new ObjectInputStream (is);
//obj = (Object) msg ;
// 2. Lire le message envoyé par le serveur (méthode bloquante, par exemple : readObject())
Object obj = ois.readObject();
// 3. Convertir l'objet ('Object') reçu en une chaine de caractères ('String')
String msg = (String) obj;
// 4. Afficher la chaine de caractères
System.out.println(msg);
}
}
catch(Exception e)
{
System.out.println(e);
}
}
/** Méthode permettant de lire une chaine de caractères depuis la ligne de commandes */
public String readMessage()throws IOException
{
String s="";
char c;
while ((c=(char)System.in.read())!='\n')
s=s+c;
return s;
}
/** Méthode permettant de se connecter au serveur, de lire les chaines de caractères depuis une ligne de commandes et de les envoyer au serveur. La chaine 'Bye' doit mettre fin à la connexion*/
public void launch()
{
try
{
String msg;
// 1. Créer la socket
System.out.println("Connexion au serveur...");
s = new Socket(getInetAddress(),getPort());
// 2. Lancer le Thread (méthode 'start') permettant de recevoir les réponses du serveur
t = new Thread(this);
t.start();
OutputStream os ;
ObjectOutputStream oos ;
os = s.getOutputStream();
oos = new ObjectOutputStream(os);
oos.writeObject(login);
// 3. Récupérer le flux de sortie de la socket (méthode getOutputStream() de la classe Socket)
do
{
//OutputStream os = s.getOutputStream();
//ObjectOutputStream oos = new ObjectOutputStream(os);
//String msg = "Message du Client";
msg=Lire.S();
System.out.println("Réception des messages en cours... \n");
//Object obj=(Object) msg;
// 4. Ecrire le message sur le flux de sortie de la socket (méthode writeObject());
oos.writeObject(msg);
}
// 5. Mettre fin à la connexion si le message envoyé est 'Bye'
while(!msg.equals("Bye"));
s.close();
System.out.println("Vous êtes deconnecté du serveur");
}
catch(IOException e)
{
System.out.println("Erreur de sérialisation "+e);
}
}
/** Méthode permettant d'introduire le numéro de port surveillé par le serveur */
public void setPort(int p)
{
if(p >0)
{
port=p;
}
}
/** Méthode permettant de retourner le numéro de port du serveur */
public int getPort()
{
return port;
}
/** Méthode permettant de retourner l'adresse IP du serveur */
public InetAddress getInetAddress()
{
return this.inetAddress;//this->pour une variable globale qui aurait le même nom que le paramètre (ici on peut ne pas le mettre)
}
/** Méthode permettant d'introduire le nom ou l'IP du serveur
* @throws UnknownHostException */
public void setInetAddress (String machineName/*InetAddress inetAddress*/) throws UnknownHostException
{
// 'if(inetAddress!='NULL')
// {
try
{
inetAddress=InetAddress.getByName(machineName);
}
catch(Exception e)
{
}
//inetAddress=InetAddress.getLocalHost(); //récupérer l'adresse IP de la machine
// }
}
/** Méthode permettant d'introduire le login de l'utilisateur */
public void getLogin() throws IOException {
System.out.print("Entrer votre login SVP : ");
this.login=readMessage();
}
public void setLogin(String _login){
this.login=_login;
}
//////////////////////////////////////////////////////////////////////////////////////////////
// Méthode principale : 'main'
//
// Le programme prendra 2 paramètres : une adresse ou un nom de serveur, un numéro de port.
//
//////////////////////////////////////////////////////////////////////////////////////////////
public static void main(String[] arg) throws UnknownHostException, IOException
{
Client em = new Client();
em.setInetAddress("localhost");
em.setPort(9999);
em.getLogin();
em.launch();
}
}
20 févr. 2010 à 14:54
Je n'ai pas eu le courage de tout lire (l'indentation inexistante du code rend la lecture très lourde!!).
Mais d'après ce que j'ai pu lire, il faudra faire très attention à faire chaque fois une correspondance entre un OutputStream et un InputStream, dans cet ordre.