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 :

problème Sockets JAVA


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut problème Sockets JAVA
    Bonjour à tous

    je travaille avec les sockets (je suis débutant dans cette technologie) mon problème et le suivant

    j'envois une demande au serveur, si la réponse du serveur est un seul message c'est bon mais lorsque j'attends que le serveur me renvoit deux messages je ne reçois qu'un seul
    pour bien préciser, en mode débuggage tout ca marche bien
    au fait l'idée que j'ai c'est qu'il s'agit de problème de synchronistation

    mon code est le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private Socket skt;
    private InputStream is;
    private OutputStream os;
     
    //connexion
    skt = new Socket(host, port);
    is = skt.getInputStream();
    os = skt.getOutputStream();
     
    //Envois 
    os.write(bytes); //bytes : bytes à écrire
     
    //reception
    len = is.read(buf); //buf:le buffer qui sera rempli par la réponse du serveur et len c'est la longueur lue retournée
    mon problème se situe au niveau de read qui me renvoit un seul message même si je devais avoir deux
    est ce qu'il y a une possibilité pour que le serveur me renvoie toute la réponse

    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Par défaut
    J'imagine que le read doit se terminer a la fin du premier message...


    Pourquoi ne pas créer un thread qui écoutera les messages du serveur?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 142
    Par défaut
    C'est quoi le serveur ? Un serveur maison ? Web, FTP... ?

    Sinon, comme le dit la JavaDoc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    read()
              Reads the next byte of data from the input stream.
    Donc si tu veux lire un 2e byte, tu l'appelles encore une fois ^^

    Regarde du coté du bufferedReader....

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut Re Sockets
    justement, je dois travailler avec les threads mais je n 'ai pas bcp d'idée la dessus
    je sais que je dois créer une classe qui hérite de Thread et implémenter la méthode run mais comment? je ne sais pas

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut Re Sockets
    si vous pouvez terminer mon code je vous serai trés reconnaissant

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 77
    Par défaut
    La comme ca, je dirais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     new Thread()
              {
                public void run()
                {
                 while (conditionADefinir){
                  len = is.read(buf);
                  // traitement du résultat
     
                  }
                }
              }.start();

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 6
    Par défaut Re Socket
    Merci pour tes réponses
    voila ce que j'ai essayé mais ca n a pas marché

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    private Socket skt;
    private InputStream is;
    private OutputStream os;
     
    1 - connexion
              skt = new Socket(host, port);
              skt.setSoTimeout(timeout);
              is = skt.getInputStream();
              os = skt.getOutputStream();
    2 - Envoi
              IoBuffer buffer = ......
              byte[] msg = new byte[buffer.limit() - buffer.position()];
              buffer.get(msg);
              os.write(msg);
    3 - Reception
              byte[] buf = new byte[4192];
              int longuer = recevoirReponse(buf);
              //code de la methode recevoirReponse
              public int recevoirReponse(byte[] buf) throws Exception {
                    int longuer = 0;
                    try {
                         len = is.read(buf);
                    } catch (Exception e) {}
                    return longuer;
              }
    aprés notre discution j'ai modifiée la phase 3 l'impklémentation de la méthode recevoirReponse comme suit
    3-bis - Reception
              //déclaration
              BufferedReader in = null;
              SocketListener sl = null; //le thread qui va réagir à la réponse du 
                                               //serveur (l 'implémentation à la fin)
              public int recevoirReponse(byte[] buf) throws Exception {
                    in = new BufferedReader(new InputStreamReader(is));
                    sl = new SocketListener(in); // creation du thread
                    sl.start();
                    return sl.len;
              }
     
    4 - implémentation du thread
              public class SocketListener extends Thread {
                        private BufferedReader in;
                        private boolean run = true;
                        int len;
                        //constructeur
                        public SocketListener(BufferedReader b) {
                                  in=b;
                        }
                        public void finish() {
                                  run = false;
                        }
     
                        public void run() {
                                  len=0;
                                  while (run) {
                                           try {
                                                    len = in.read();
                                           } catch (IOException e) {}
                                 }
                       }
             }
    Voila j'espère que j'ai tout écrit
    et Merci une autre fois

  8. #8
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    Bonjour si ca peu aider j'ai un piti client/server qui trainai dans un coin:
    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
    class Client
    	{
    	public static void main(String args[])
    		{
    		try
    			{
    			int size;
    			byte buff[]=new byte[2000];		
    			Socket s=new Socket("localhost", 8080);
     
    			InputStream is=s.getInputStream();
    			OutputStream os=s.getOutputStream();
     
    			os.write(new String("Test").getBytes());
    			size=is.read(buff);
    			System.out.println(new String(buff, 0, size));
    			}
    		catch(Exception e)
    			{
    			}
    		}
    	}
    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
    class server
    	{
    	public static void main(String args[])
    		{
    			try
    			{
    			ServerSocket sSocket=new ServerSocket(port);
     
    			while(true)
    				{
    				Socket socket=sSocket.accept();
    				new Connection(socket);
    				}
    			}
    		catch(Exception e)
    			{
    			e.printStackTrace();
    			}
    class Connection extends Thread
    	{
    	Socket socket;
     
    	Connection(Socket s)
    		{
    		socket=s;
    		start();
    		}
    	public void run()
    		{
    		try
    			{
    			String rep="ok";
    			byte[] buff=new byte[2000];
    			InputStream is=socket.getInputStream();
    			int size=is.read(buff);
    			//Traiter les donner recu.
    			byte mess[]=rep.getBytes();
     
    			OutputStream os=socket.getOutputStream();
    			os.write(mess);
     
    			socket.close();
    			}
    		catch(Exception e)
    			{
    			System.out.println(e);
    			}
    		}
    	}

Discussions similaires

  1. Problème Socket Java architecture Serveur multi Client
    Par abdelhak_z dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/03/2015, 13h42
  2. Problème Socket Java architecture Client Serveur
    Par Jonny-1600 dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2012, 20h50
  3. problème socket en java
    Par j.david dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 18/11/2008, 16h13
  4. [MFC] Problème Socket + Connexion SQL
    Par BananaUltra3C dans le forum MFC
    Réponses: 6
    Dernier message: 20/05/2005, 16h41
  5. [Réseau] Problème socket
    Par neenee dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 18/01/2005, 15h26

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