Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JAVA] client et serveur

mini chat

Anonyme
    23 août 2006 à 21:42:59

    Bonjour je suis en train d'essayer de faire un mini serveur et client chat.
    Pour le moment je ne fait que des tests mais j'ai déjà des problème.

    Désolé d'avance pour la taille mais je ne trouve pas mon problème.
    Je lance le serveur pas de problème et quand je lance le client, le serveur envoye normal 3 messages mais le client ne les reçois pas pourquoi ?

    Voilà le coté serveur :


    import java.util.ArrayList;
    import java.io.*;
    import java.net.*;

    public class main {

            public static void main(String args[]) {

                    try {
                            socket = new ServerSocket(18000);
                            instanceMain = new main();

                            while (true) {
                                    System.out.println("Attente de connection...");
                                    new clientThread(socket.accept(), instanceMain);
                            }

                    } catch (Exception e) {
                            System.out.print("Socket ouvert" + e);
                    } finally {

                    }

            }

            public void addClient(PrintWriter out) {
                    connectee.add(out);
                    enLigne++;
            }

            public void delClient(PrintWriter out) {
                    connectee.remove(out);
                    enLigne--;
            }

            public void sendAll(String m) {
                    for (PrintWriter p : connectee) {
                            p.print(m);
                            p.flush();
                    }
            }

            private static int enLigne = 0;

            private static ArrayList<PrintWriter> connectee = new ArrayList<PrintWriter>();

            private static ServerSocket socket;

            private static main instanceMain;

    }

    class clientThread implements Runnable {

            public clientThread(Socket s, main m) {
                    System.out.println("connection ok...");
                    socket = s;

                    try {
                            out = new PrintWriter(s.getOutputStream());
                            in = new BufferedReader(new InputStreamReader(s.getInputStream()));
                            _m = m;
                            _m.addClient(out);
                    } catch (Exception e) {

                    }

                    t = new Thread(this);
                    t.start();
            }

            public void run() {

                    try {
                            while (true) {
                                    System.out.println(in.read());
                            }
                    } catch (Exception e) {

                    } finally {
                            _m.delClient(out);
                    }

            }

            private PrintWriter out;

            private BufferedReader in;

            private Thread t;

            private main _m;

            private Socket socket;

    }



    et le coté client :


    import java.util.ArrayList;
    import java.io.*;
    import java.net.*;

    public class main {

            public static void main(String args[]) {
                    try {
                            socket = new Socket(InetAddress.getByName("127.0.0.1"), 18000);
                            System.out.print("OK");
                            new chatClient(socket);
                            socket.close();
                    } catch (Exception e) {
                            System.out.print("connection impossible");
                    } finally {

                    }

            }

            private static main instanceMain;

            private static Socket socket;
    }

    class chatClient implements Runnable {

            public chatClient(Socket s) {
                   
                    socket = s;
                   
                    try {
                            in = new BufferedReader(new InputStreamReader(socket
                                            .getInputStream()));
                            out = new PrintWriter(socket.getOutputStream());
                    } catch (Exception e) {
                            System.out.print("2" + e);
                    }

                    _t = new Thread(this);
                    _t.start();

            }

            public void run() {
                    try {
                            while (true) {
                                    out.println(53);
                                    out.flush();
                            }
                    } catch (Exception e) {
                            System.out.println(e);
                    }
            }

            private BufferedReader in;
           
            private PrintWriter out;
           
            private Socket socket;

            private Thread _t;

    }



    merci

    • Partager sur Facebook
    • Partager sur Twitter
      25 septembre 2006 à 22:34:27

      Tu fermes la socket trop tot:
      new chatClient(socket); // lance le thread et retourne tout de suite
      socket.close(); // ferme la socket
      Il faut mettre socket.close() a la fin du thread (a la fin de la methode run)
      • Partager sur Facebook
      • Partager sur Twitter
        20 octobre 2006 à 16:58:41

        J'ai 2 choses a dire avant de passer sur le code en lui meme...
        je suis chiant je sais MAIS: la premiere lettre du nom de la class c'est en majuscule... et evite Main... appel la Serveur...
        la deuxieme chose, evite les _ devant les variable... car "c'pas naturel" sérieusement c'est la nomenclature java pas de _ devant les variables...

        ensuite pour ton code...
        il me parait bizare que tu mette dans ton tableau le out.
        il faudrait mieux mettre le socket s.
        ce qui va te permetre de ressortir l'adresse IP de ton client et d'autre info de lui...

        et tu dis que ton client ne recois rien, mais tu ne lui envoie rien aussi...
        si j'ai bien compris ton probleme...
        • Partager sur Facebook
        • Partager sur Twitter
          28 octobre 2006 à 9:51:25

          pas lu tout le code mais effectivement tu fermes la socket après la création de ton runnable,

          cette creation est non blocante donc aussi créé ton thread le socket est fermé :)
          • Partager sur Facebook
          • Partager sur Twitter

          [JAVA] client et serveur

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown