IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Client Serveur socket


Sujet :

Entrée/Sortie Java

  1. #21
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par ced56 Voir le message
    Je viens de tester ton code avec le client j'envoie bien hello, il se passe quelque chose du côté du serveur, il met Envoi de Coucou cependant la console Client n'affiche pas Coucou :s
    pb de firewall?

  2. #22
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    A j'allais oublier la socket telle que tu l'utilise est bloquante.

    donc ton programme se bloque sur le readLine tant que tu ne fournit pas quelque chose de l'autre coté.

    En reprenant le code de Service.java que je t'avais fournit plus haut et en modifiant la boucle comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    while (true) {
      str = in.readLine();
      if (str.equals("$")) break;
        System.out.println(numero+":"+str);
        if (str.equals("hello")) {
          System.out.println("Envoi de coucou");
          out.println("Couou !!!");
         } else {
           out.println(str);
         }
    }
    ton programme ne devrais plus se coincer.

    La vrai solution pour pallier au problème de blocage sur le readLine est d'utiliser des socket non bloquant.
    http://humbert-florent.developpez.co...vance/#LIV-D-1

  3. #23
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Par défaut
    Merci je teste avec le nouveau code puis je regarde les sockets non bloquants de plus près.
    Juste une dernière question qui est en fait le centre du problème, est-ce qu'il est possible de mettre en place simplement en remplaçant à ce niveau là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        if (str.equals("hello")) {
          System.out.println("Envoi de coucou");
          out.println("Couou !!!");
    Remplacer le hello par n'importe quelle chaîne de caractère et le Coucou envoyé par une saisie clavier ?

    Merci d'avance

    Edit : J'ai testé ton code ça ne marchait pas par contre j'ai démarré Service dans ma classe Client à ce niveau là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (true )
    			{
    				str=clavier.readLine();
    				buffer_out.println(str);
    				if (str.equals("$")||str.equals("$$") ) break;
    				Service service=new Service(numero,socket);
        			        service.start();
    			}
    Et ça fonctionne le Coucou est envoyé

  4. #24
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par ced56 Voir le message
    Merci je teste avec le nouveau code puis je regarde les sockets non bloquants de plus près.
    Juste une dernière question qui est en fait le centre du problème, est-ce qu'il est possible de mettre en place simplement en remplaçant à ce niveau là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        if (str.equals("hello")) {
          System.out.println("Envoi de coucou");
          out.println("Couou !!!");
    Remplacer le hello par n'importe quelle chaîne de caractère et le Coucou envoyé par une saisie clavier ?
    Oui, il suffit juste d'implémenter la saisie clavier comme tu l'as faite pour le client.

  5. #25
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Citation Envoyé par ced56 Voir le message
    Edit : J'ai testé ton code ça ne marchait pas
    Il marche chez moi.
    Service
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    package mess;
    import java.io.*;
    import java.net.*;
     
    public class Service extends Thread
    {
        private  Socket socket;
        private int numero;
     
        public Service(int numero,Socket socket)
        {
        	this.numero=numero;
        	this.socket=socket;
        }
     
        public void run()
        {
        	try
                {
        		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                    String str=null;
        		while (true) {
        			str = in.readLine();
        			if (str.equals("$")) break;
        			System.out.println(numero+":"+str);
                            if (str.equals("hello")) {
                                System.out.println("Envoi de coucou");
                                out.println("Couou !!!");
                            } else {
                                out.println(str);
                            }
                        }
        		System.out.println("Deconnection client "+numero);
        		in.close();
                    out.close();
        		socket.close();
                }
        	catch(IOException e){}
        }
    }
    Serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    package mess;
     
    import java.io.*;
    import java.net.*;
     
    public class Serveur extends Thread
    {
        ServerSocket serveur=null;
        Socket socket=null;
        int port=5000;
        int numero=1;
     
        public void run()
        {
        	try
        	{
        		System.out.println("Serveur actif");
        		serveur = new ServerSocket(port);
        		while(true)
        		{
                        socket=serveur.accept();
                        System.out.println("Connection client "+ numero +" "+socket);
                        Service service=new Service(numero++,socket);
                        service.start();
        		}
        	}
        	catch(IOException e)
        	{
        		System.out.println("Erreur Serveur");
        	}
       }
     
       public static void main(String[] args)
        {
    	   Serveur leServeur=new Serveur();
    	   leServeur.start();
        }
    }
    Client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    import java.io.*;
    import java.net.*;
     
    public class Client extends Thread
    {
        Socket socket =null;
        int port=5000;
        String adresse=null;
        InetAddress ip=null;
     
        public Client(InetAddress a){ip=a;}
        public Client(String s){adresse=s;}
     
        public void run()
        {
            try
                {
                    System.out.println("Client actif");
                    Reader reader= new InputStreamReader(System.in);
                    BufferedReader clavier=new BufferedReader(reader);
                    if (ip!=null) socket = new Socket(ip, port);
                    else socket = new Socket(adresse, port);
                    System.out.println("SOCKET = " + socket);
                    PrintWriter buffer_out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    String str =null;
                    while (true )
                        {
                            str=clavier.readLine();
                            buffer_out.println(str);
                            if (str.equals("$")||str.equals("$$") ) break;
                            str=in.readLine();
                            if (str != null) {
                                System.out.println("lecture de " + str);
                            }
                        }
                    in.close();
                    buffer_out.close();
                    socket.close();
                }
            catch(IOException e)
                {
                    System.out.println("Erreur client");
                }
        }
     
        public static void main(String[] args)
        {
            Client client=new Client("127.0.0.1");
            client.start();
        }
    }
    Citation Envoyé par ced56 Voir le message
    par contre j'ai démarré Service dans ma classe Client à ce niveau là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while (true )
    			{
    				str=clavier.readLine();
    				buffer_out.println(str);
    				if (str.equals("$")||str.equals("$$") ) break;
    				Service service=new Service(numero,socket);
        			        service.start();
    			}
    Et ça fonctionne le Coucou est envoyé
    Pourquoi, mettre le service dans le client, tu compte te connecter à plusieurs serveur en même temps, dans ce cas ou compte tu envoyer la saisie clavier?

  6. #26
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Par défaut
    Merci pour ta nouvelle réponse.
    J'ai mis le Service dans Client car sinon j'avais une boucle infinie qui envoyait le Coucou et en agissant ainsi il n'envoyait qu'une seule fois donc une connexion à un seul serveur suffira largement.
    Je vais essayé ton code et sinon pour la saisie clavier je crois voir ce qu'il faut faire

    Edit : J'ai utilisé ton code et c'est fonctionnel, il me reste plus qu'à trouver un moyen de remplacer le hello par n'importe quelle String puis le Coucou par une saisie clavier (en utilisant la méthode que j'ai utilisé dans Client)

  7. #27
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Par défaut
    J'ai réussi à tout mettre place encore merci pour ton aide !
    Cependant je viens de me rendre compte que ni le serveur ni le client ne peut envoyer 2 phrases à la suite car sinon il y a un décalage dans la réception des messages.
    Est-ce qu'il est possible de supprimer ce décalage ?

Discussions similaires

  1. PTI BTS : client Serveur socket et compagnie
    Par Nicow57 dans le forum VB.NET
    Réponses: 0
    Dernier message: 24/04/2009, 14h28
  2. Client/Serveur Socket, envoyer un message précis
    Par Chyokyka dans le forum Débuter
    Réponses: 4
    Dernier message: 24/03/2009, 18h59
  3. Application client/serveur sockets
    Par loreleï85 dans le forum Réseau
    Réponses: 4
    Dernier message: 05/01/2007, 13h44
  4. Question client-serveur socket
    Par Lex99 dans le forum Développement
    Réponses: 3
    Dernier message: 07/02/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo