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 :

fuite de memoire, socket et Stream


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut fuite de memoire, socket et Stream
    Bon je vais essayer de faire simple.
    voici a quoi mon code ressemble :

    cote serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while(...){
        in = new ObjectInputStream(...)
        in.read();
        out = new ObjectOutputStream(...)
        out.write(...);
    }
    cote client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while(...){
        out = new ObjectOutputStream(...)
        out.write(...);
        in = new ObjectInputStream(...)
        in.read();
    }
    mon probleme survient lorsqu'il y a beaucoup d'iterations a effectuer. L'erreur correspondante est :
    java.net.SocketException: Software caused connection abort: socket write error
    Je suppose que c'est du a une fuite de memoire ou quelque chose comme ca, car j'utilise j'appelle des constructeur a chaque iteration de la boucle.
    j'ai donc essaye de rendre les varialbes null et d'appeller le garbage collector, mais rien y fait.

    Je pense que la solution serait de sortir les appels de constructeur de la boucle :

    cote serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    in = new ObjectInputStream(...)
    out = new ObjectOutputStream(...)
    while(...){
        in.read();
        out.write(...);
    }
    cote client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    out = new ObjectOutputStream(...)
    in = new ObjectInputStream(...)
    while(...){
        out.write(...);
        in.read();
    }
    Mais la un autre probleme se pose :
    d'apres la javadoc new ObjectInputStream(...) est bloquant, il reste bloqué jusqua ce que l'outputstream correspondant soit "ecrit".
    que faire ?
    je peux fournir des sources si necessaire.

    merci d'avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Pour lire dans un flux et écrire dans un autre, il faut deux Threads séparés.

    Regarde les application de discussions sur internet en java. Tu devrais voir des exemples de fonctionnement.

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par dingoth Voir le message
    Regarde les application de discussions sur internet en java. Tu devrais voir des exemples de fonctionnement.
    heu... je dois demander quoi a google ? c'est quoi les mots clees ?

  4. #4
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Regarde du coté des PipedOutputStream et PipedInputStream
    Mais effectivement il faut 2 threads pour gérer ce process


    cf javadoc "Attempting to use both objects from a single thread is not recommended as it may deadlock the thread"

  5. #5
    Membre confirmé Avatar de mptijr
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    408
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 408
    Points : 503
    Points
    503
    Par défaut
    je ne sait pas si je te comprends bien.Mais selon moi, tu dois essayer de gérer les exceptions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
        //mettre ton code ici ton code
    }
    catch(Exception e)
    {
       //gérer les exceptions
    }

  6. #6
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par divxdede Voir le message
    Regarde du coté des PipedOutputStream et PipedInputStream
    Mais effectivement il faut 2 threads pour gérer ce process
    Cela fonctionne mais pas avec mon cas
    J'ai un client et un serveur. Faut il 2 thread pour chacun des acteurs ? c'est a dire 4 thread ? si c'est le cas, comment recuperer le PipedOutputStream et le PipedInputStream du cote client ?

    @mptijr
    ce n'est pas un probleme d'exceptin que j'ai mais un probleme de bloquage : le client est en attente.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Le serveur doit avoir un Thread de lecture et un autre d'écriture.

    Le client doit avoir un Thread de lecture et un autre d'écriture.

    Au total, c'est donc réparti en quatre Threads, oui, mais répartis dans deux applications.

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par dingoth Voir le message
    Le serveur doit avoir un Thread de lecture et un autre d'écriture.

    Le client doit avoir un Thread de lecture et un autre d'écriture.

    Au total, c'est donc réparti en quatre Threads, oui, mais répartis dans deux applications.
    quelqu'un peut il me dire ce qui va pas avec mon code ?

    Edit : j'ai resolu le probleme qu'il y avait, mais je retombe toujours sur le meme probleme de depart. le client se bloque.
    Quelqu'un pourrait il m'aider a le resoudre ou a le contourner ?
    J'ai mis a jour les sources.
    Fichiers attachés Fichiers attachés

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Pour info, mon probleme n'est pas solvable :
    http://forum.java.sun.com/thread.jspa?threadID=5271556

    merci quand meme ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JVM]Fuite de mémoire
    Par anykeyh dans le forum Général Java
    Réponses: 6
    Dernier message: 28/09/2009, 23h43
  2. [memoire]Fuite de memoire?
    Par clovis dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2006, 23h04
  3. Outils pour rechercher des fuites de memoires dans un prog
    Par elekis dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 29/04/2005, 22h06
  4. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 09h46
  5. correction de fuite de memoire
    Par vince3320 dans le forum C
    Réponses: 38
    Dernier message: 28/06/2004, 12h27

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