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 :

[Socket] Message different pour 2 execution similaire


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut [Socket] Message different pour 2 execution similaire
    Bonjour bonjour,

    J'ai +ou - un problème avec une appli Client/Serveur
    Je lance le serveur et le client sur la meme machine
    a la conexion le serveur envoi un fichier au client
    jusque la pa de probleme

    mais ce qui est bizarre c'est la conxeion du client, quand je me connecte en donnant localhost comme host, je ne recois pas le fichier, il me leve EOFExcpetion, par contre quand je met 127.0.0.1, je n'ai pa cete exception et tout se deroule normalemen...

    je pensais pourtan que 127.0.0.1 et localhost etai approximativement pareil...
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Apparement ca marche maintenant...
    en fait mon execution se passe en gros comme ca


    Lancement du serveur
    Conexion du client
    Le serveur ouvre le fichier et l'envoie byte par byte
    le client recoit byte par byte et ecrit dans un fichier tant que read() ne renvoie pa -1

    j'utilise BufferedOutputStream et BufferedInputStream
    je ne vois pa vraiment pourquoi il arrive a me lever cete excpetion qqfois
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Bon je pense que je touche du doigt le probleme
    en fait le serveur ouvre le fichier, mais il a peut etre pa le temps d'ouvrir le fichier avan que le premier client ne se connect...

    j'apporte une petite modif a ske g mi au dessus

    Lancement du serveur
    Conexion du client
    Le serveur ouvre le fichier et l'envoie byte par byte
    le client recoit byte par byte et ecrit dans un fichier tant que read() ne renvoie pa -1
    lorsqu'il recoit -1 il ecrit le tableau de byte dans un fichier
    le client ouvre le fichier en lecture

    l'exception est levée a la derniere etape
    la reception et lecriture du fichier est gérée dans un thread
    l'ouverture du fichier est dans le client qui instancie le Thread

    comment je peu faire pour que le client attende que le thread ait bien ecri le fichier?
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  4. #4
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Dans ton client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private String lock = new String("lock");
     
    ...
    tonThread.start();
    synchronized(lock)
    {
      lock.wait();
    }
    Dans ton thread:
    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
     
    try
    {
      // reception des donnees etc ...
     
    }
    catch (Exception e)
    {
      // ton traitement
    }
    finally
    {
      synchronized(lock)
      {
        lock.notifyAll();
      }
    }
    Avec ca tu devrais t'en sortir ...

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    hmmm il me di que je ne peu pa utiliser finally san un try
    : : : : :
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Citation Envoyé par Erok
    hmmm il me di que je ne peu pa utiliser finally san un try
    : : : : :
    Il y a pourtant un try dans le code que je t'ai file ..

    meme si le try n'est pas forcement necessaire, il vaut mieux en avoir un et mettre le notifyAll dans un finally pour eviter de laisser bloque l'autre thread en cas d'oubli..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    oui oui j'avai vu j'ai pourtant bien adapté ton code au mien...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        try {
    	    byte[] tmp = new byte[1];
    	    while (i!=-1) {
    	        i=entree.read(tmp);
    	        monFichier.write(tmp);
    	    }
    	}catch(java.io.IOException e) { System.out.println("IO Error");};
     
    	finally {
     	    synchronized(lock) {
       		lock.notifyAll();
      	     }
        }
    a moins que j'ai fai une erreur...
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Tu as fait une erreur: le ; apres } du bloc catch...

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Desolé j'ai du mal avec les Synchronized des threads...c un point obscur pour moi
    j'ai encore 2 erreur...

    ClientThread.java:47: cannot resolve symbol
    symbol : variable lock
    location: class ClientThread
    synchronized(lock) {
    ^
    ClientThread.java:48: cannot resolve symbol
    symbol : variable lock
    location: class ClientThread
    lock.notifyAll();
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  10. #10
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    C'est normal, il fallait adapter l'exemple

    J'ai declare la variable lock private dans ton client, alors forcement le thread ne peut pas l'utiliser..

    Ce que tu peux faire c'est definir des methodes dans Client qui font le boulot..

    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
     
     
    // Dans Client
     
    private String lock = new String("lock");
     
    public void attendre()
    {
      synchronized(lock)
      {
        lock.wait();
      }
    }
     
    public void debloquer()
    {
      synchronized(lock)
      {
        lock.notifyAll();
      }
    }
    Comme ca tu peux faire qq chose dans ce gout la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monClient.debloquer();
    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Les synchronized resteront toujours un msytere pour moi je croi....
    j'ai adapté ton code au mien... le blocage est fai par le Client apre l'instanciation du thread, une foi ke le thread a fini sa lecture, il appele la fonction de deblocage du pere... enfin il est sensé le faire mai apparement il le fai pas ...

    javai essayé aussi que lorsque le thread est cré il blokai le client...
    mai la j'avai koikil arrive un probleme avec mon fichier...
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  12. #12
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Peux-tu montrer les bouts de codes qui posent problemes ..

    Bulbo :
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Bien sur

    pour le 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
     
    Client(String host,int port) throws Exception{
     
    	 lock = new String ("lock");
        	 S = new Socket(host,port);
             out = new PrintWriter(S.getOutputStream());
             in = new BufferedInputStream(S.getInputStream());
    	 monThread = new ClientThread(out,in,this);
    	 maRecherche=new Interface_RecherchePDB(this);
    	 try {
    	     ObjectInputStream lecture=new ObjectInputStream(new FileInputStream("./BasePDB2.dat"));
                 monTableauPDB=(Vector)lecture.readObject();
    	     }catch(FileNotFoundException e){System.out.println("File not found");}
                  catch(ClassNotFoundException e1) {System.out.println("Class not found");}
    	      catch(EOFException e3) {System.out.println("End of file error");};
    	Affichage();
     
        }
    le thread instancié par le client, pren en parametre les entree et sorti du socket ainsi que la classe qui l'a instacié :

    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
     
    public void run(){
    	try {monFichier = new FileOutputStream("./BasePDB2.dat");}catch(java.lang.Exception e) {};
     
    	int i=1;
    	monPere.blocage();
     
    	try {
    	    byte[] tmp = new byte[1];
    	    while (i!=-1) {
    	        i=entree.read(tmp);
    	        monFichier.write(tmp);
    	    }
    	}catch(java.io.IOException e) { System.out.println("IO Error");};
     
    	monPere.deblocage();
        }
    c'est la version qui me fait toujours EOFException

    sinon j'ai pensé a qqc dotre
    ca serait rajouté dans le Client, apre la creation du thread une boucle qui attendrai que le thread soit interompu
    dans le thread, une foi que j'ai lu, je fai interrupt()
    comme ca je revien dan le client jouvre mon fichier, et je notify le thread...

    est ce que c'est pa un peu ...bourrin comme methode?[/code]
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  14. #14
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    C'est normal que ca ne marche pas.

    La methode blocage() bloc le Thread qui l'execute (pas le bon dans ton cas).

    Tu dois lancer le ClientThread et ensuite faire le blocage (et surtout pas faire le blocage dans le run de ton Thread)

    Client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    monThread = new ClientThread(out,in,this); 
    blocage()
    Thread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       try { 
           byte[] tmp = new byte[1]; 
           while (i!=-1) { 
               i=entree.read(tmp); 
               monFichier.write(tmp); 
           } 
       }catch(java.io.IOException e) { System.out.println("IO Error"); }
       finally
       {
       monPere.deblocage();
       }
    La synchro est faite correctement dans ce cas..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    oui je lai aussi essayé comme ca
    mais ca se bloque sans redemarrer

    mai ma solution avec interrupt et notify serai pa bonn? ou alor tro barbare?
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  16. #16
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Trop barbare c'est clair ...

    Ce que je ne comprends pas c'est que ca bloque sans redemarrer, tu fais bien un start() du Thread pour le lancer et tu n'appelles pas directement la methode run() :

    Montre voir le constructeur de ClientThread ..

    Bulbo :
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ClientThread(PrintWriter out,BufferedInputStream in,Client C) {
            sortie=out;
    	entree=in;
    	monPere=C;
    	this.start();
        }
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  18. #18
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Tu as bien vire le monpere.blocage() du code du ClientThread ?

    Sinon je ne vois vraiment pas pourquoi ca bloque.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    ouep ...c etrange en effet
    je vai verifié que l'envoi est bien fai au cas ou... pourtan g rien touché ici
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 80
    Points : 67
    Points
    67
    Par défaut
    le code d'envoi est bon....c'est celui que javai ecri et qui marchai
    AMD Athlon XP2800+ Barton
    Carte mère MSI K7N2 Delta-L
    CG MSI Radeon RX9800Pro TD-128
    1go DDR2700 Samsung

    Windows XP SP1

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2014, 01h24
  2. Réponses: 4
    Dernier message: 20/11/2008, 09h47
  3. [JTable] tooltips differents pour chaque cellule
    Par orelero dans le forum Composants
    Réponses: 6
    Dernier message: 23/05/2006, 17h16
  4. Réponses: 5
    Dernier message: 29/08/2005, 14h51
  5. [DEV] PL/SQL Message envoyé pendant l' execution
    Par ducho dans le forum PL/SQL
    Réponses: 1
    Dernier message: 13/07/2005, 08h04

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