Lire les caracteres au fur et à messure: java

Résolu
Decon Messages postés 95 Statut Membre -  
Decon Messages postés 95 Statut Membre -
Bonjour à toutes et à tous,
Comme indiqué dans le titre, je jouhaite pouvoir lire les caractère que je rentre au clavier au fur et à mesure sans meme appuyer sur entrer.
Au fait, je realise un projet d'echange en live multi-clients serveur. Pour l'instant mes clients reussisent à communiquer via un terminal; mais pour cela, il faut que chaque clt ait fini d'ecrire son message et taper sur entrer pour que les autres clients le recoive. ALors que ce que je ve c'est qu'à chaque fois que je tape un caractère, les autres clts le reçoivent en meme temps.
Le but est qu'ils puissent modifier le texte apres(mais ca c 'est la deuxième étape; déjà s'ils peuvent le voir en meme temps ça serait bien).
En fin, l'objectif final est de faire une belle interface swing faisant tout ca qui est mentionné ci-haut.
Merci d'avance de votre aide car je ne sais plus quoi faire.

10 réponses

  1. Billgates95 Messages postés 55 Statut Membre 24
     
    slt pour lire les caracteres au fur et a mesure tu peux faire des manip de chaine
    en C ou en C++
    le mot cle en C++ est string de la librairie string .h;l'equivalent en C est sterlen
    surtout noubli pas de les progra a la norme ISO ou ANSI selon le compilateur que tu as allez Bonne chance
    0
  2. Decon Messages postés 95 Statut Membre 2
     
    merci de la réponse; mais le langage qui m'est imposé est le java(c'est un projet à la fac).
    0
  3. xav3601 Messages postés 3390 Statut Membre 312
     
    Tu peux mettre le code qui leut permet de communiquer déjà!
    Comme ca on pourra se baser la dessus pour essayer d'avancer!
    0
  4. Seb
     
    Si tu dois le faire en Swing, voici un petit exemple basé sur un JTextField :

    JFrame fr = new JFrame();
    JTextField tf = new JTextField();
    tf.getDocument().addDocumentListener(new DocumentListener() {

    @Override
    public void removeUpdate(DocumentEvent e) {
    manageChange(e);
    }

    @Override
    public void insertUpdate(DocumentEvent e) {
    manageChange(e);
    }

    @Override
    public void changedUpdate(DocumentEvent e) {
    manageChange(e);
    }

    private void manageChange(DocumentEvent e) {
    try {
    System.err.println("Type : "+e.getDocument().getText(e.getOffset(), e.getLength()));
    }
    catch (BadLocationException e1) {
    e1.printStackTrace();
    }
    }
    });
    fr.getContentPane().add(tf);
    fr.pack();
    fr.setVisible(true);
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Decon Messages postés 95 Statut Membre 2
     
    code de la partie client:

    import java.io.*;
    import java.net.*;

    public class Client
    {
    //on declare une socket de type Socket qui ouvre une connexion au serveur
    //on declare une variable de type String
    //on initialise le port de connexion au serveur (ici le port par defaut est 8254)
    private Socket socket;
    private String name;
    private final int PORT=8254;

    //la methode Client prend en param�tre une socket ainsi qu'une cha�ne de caract�re associee � cette Socket
    public Client(Socket s, String n)
    {
    this.socket=s;
    this.name=n;
    }

    public static void main(String[] args)
    {
    //try = gestion d'erreurs, lorqu'il re�oit une erreur, il l'intercepte et l'affiche avec le catch

    //la methode "main" ouvre une socket sur une adresse IP par defaut et sur le port du serveur aussi passe en defaut

    try
    {
    BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
    String numero = "8254";
    String ipadress;
    String pseudo = System.getProperty("user.name");
    System.out.println("entrez l'adresse ip du serveur ");
    ipadress= clavier.readLine();
    Socket connexion = new Socket(ipadress, 8254);
    //Socket connexion = new Socket("172.16.0.1", 8254);
    //les 3 lignes de codes suivantes g�rent la gestion de lecture/ecriture du clavier
    PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true);
    BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));

    //ici on informe le serveur qu'un nouveau client vient de se connecter
    sortie.println("Nouveau client "+ numero);

    //on fait appelle ^ la classe ThreadClient pour etablir la connexion
    new ThreadClient(connexion, numero).start();

    System.out.println("***************************************************************************"+"\n");
    System.out.println("Bonjour "+pseudo+", bienvenue sur le Chat de notre equipe de developpement "+"\n");
    System.out.println("***************************************************************************");

    System.out.println("Connexion etablie!");
    System.out.println("Pour sortir tapez : quitter");
    System.out.println(pseudo+" peut desormais dialoguer avec les autres personnes connectees."+"\n");

    //Tant que le Client n'a pas tapper "quitter", la connexion est toujours etablie
    //le mot de passe "quitter" indique la fin d'une connexion

    /*
    while (true)
    {

    //String ligne = "test";
    char ligne = (char) clavier.read();

    if (ligne=='!')
    //if (ligne.equalsIgnoreCase("quitter"))
    {
    sortie.println("quitter");

    break;
    }

    //la sortie du "try" si la connexion au serveur a echouZ, elle est indiquee

    // ecrit le texte tapZ au serveur(ds le flux)
    while (ligne!='!') sortie.print(ligne);
    // if (ligne != null) sortie.println(ligne);
    *
    */
    while(true){

    final char EOF = (char)-1 ; // caract'ere << End Of File >>

    char carCourant ;
    carCourant = (char) System.in.read () ;

    if (carCourant == EOF){

    // static void avancerCar () {
    // try {

    sortie.println("quitter");

    break;
    }
    if (carCourant!= EOF) sortie.print(carCourant);

    // catch (java.io.IOException e) {
    // carCourant = (char) System.in.read () ;
    // carCourant = EOF ; /* En cas d'exception, on consid'ere
    // la fin de fichier atteinte. */
    // }
    // }

    }
    }
    catch(IOException e) { System.out.println("Erreur client : "+e); }
    System.out.println("Connexion terminee...");
    }

    //la methode getName permet de nous retourner le nom associe � la socket
    public String getName()
    {
    return name;
    }
    //la methode getSocket nous retourne la Socket
    public Socket getSocket()
    {
    return socket;
    }
    //setSocket permet de modifier la Socket et de la remplacer
    public void setSocket(Socket socket)
    {
    this.socket = socket;
    }
    //setName permet de changer le nom attribue � la socket
    public void setName(String name)
    {
    this.name = name;
    }

    }
    0
  7. Decon Messages postés 95 Statut Membre 2
     
    non je me suis trompé de code, celui là n'est pas bon
    Voici le bon:

    import java.io.*;
    import java.net.*;

    public class Client
    {
    //on declare une socket de type Socket qui ouvre une connexion au serveur
    //on declare une variable de type String
    //on initialise le port de connexion au serveur (ici le port par defaut est 8254)
    private Socket socket;
    private String name;
    private final int PORT=8254;

    //la methode Client prend en param�tre une socket ainsi qu'une cha�ne de caract�re associee � cette Socket
    public Client(Socket s, String n)
    {
    this.socket=s;
    this.name=n;
    }

    public static void main(String[] args)
    {
    //try = gestion d'erreurs, lorqu'il re�oit une erreur, il l'intercepte et l'affiche avec le catch

    //la methode "main" ouvre une socket sur une adresse IP par defaut et sur le port du serveur aussi passe en defaut

    try
    {
    BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
    String numero = "8254";
    String ipadress;
    String pseudo = System.getProperty("user.name");
    System.out.println("entrez l'adresse ip du serveur ");
    ipadress= clavier.readLine();
    Socket connexion = new Socket(ipadress, 8254);
    //Socket connexion = new Socket("172.16.0.1", 8254);
    //les 3 lignes de codes suivantes g�rent la gestion de lecture/ecriture du clavier
    PrintWriter sortie = new PrintWriter(connexion.getOutputStream(), true);
    BufferedReader entree = new BufferedReader(new InputStreamReader(connexion.getInputStream()));

    //ici on informe le serveur qu'un nouveau client vient de se connecter
    sortie.println("Nouveau client "+ numero);

    //on fait appelle ^ la classe ThreadClient pour etablir la connexion
    new ThreadClient(connexion, numero).start();

    System.out.println("***************************************************************************"+"\n");
    System.out.println("Bonjour "+pseudo+", bienvenue sur le Chat de notre equipe de developpement "+"\n");
    System.out.println("***************************************************************************");

    System.out.println("Connexion etablie!");
    System.out.println("Pour sortir tapez : quitter");
    System.out.println(pseudo+" peut desormais dialoguer avec les autres personnes connectees."+"\n");

    //Tant que le Client n'a pas tapper "quitter", la connexion est toujours etablie
    //le mot de passe "quitter" indique la fin d'une connexion
    while (true)
    {

    //String ligne = "test";
    String ligne = clavier.readLine();
    if (ligne.equalsIgnoreCase("quitter"))
    {
    sortie.println("quitter");

    break;
    }

    //la sortie du "try" si la connexion au serveur a echouZ, elle est indiquee

    //Ecrit dans le flux du serveur(sortie)
    if (ligne != null) sortie.println(ligne);
    }
    }
    catch(IOException e) { System.out.println("Erreur client : "+e); }
    System.out.println("Connexion terminee...");
    }

    //la methode getName permet de nous retourner le nom associe � la socket
    public String getName()
    {
    return name;
    }
    //la methode getSocket nous retourne la Socket
    public Socket getSocket()
    {
    return socket;
    }
    //setSocket permet de modifier la Socket et de la remplacer
    public void setSocket(Socket socket)
    {
    this.socket = socket;
    }
    //setName permet de changer le nom attribue � la socket
    public void setName(String name)
    {
    this.name = name;
    }

    }
    0
  8. Decon Messages postés 95 Statut Membre 2
     
    Dois je mettre mon code directement dans la la JFrame? A que niveau?
    0
  9. Seb
     
    Après tu organises ton code comme tu veux mais mon exemple définit la méthode manageChange dans laquelle se trouve un System.err qui affiche ce qui est lu à chaque frappe de touche dans le JTextField.

    C'est un exemple qui te permet de comprendre comment récupérer la saisie au fur et à mesure, mais ce n'est pas la correction de ton projet ;)
    0
  10. Decon Messages postés 95 Statut Membre 2
     
    Quelqu'un peut il m'aider?????
    0
  11. Decon Messages postés 95 Statut Membre 2
     
    ok, merci
    0