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

Langage Java Discussion :

Problème Socket Exception


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut Problème Socket Exception
    Bonjour à tous,

    Voilà, je suis nouveau en Java et je développe une appli client serveur multithread. J'obtiens une erreur qui commence sérieusement à m'agacer. Lorsqu'un client se connecte à mon serveur et demande le téléchargement d'un fichier un nouveau thread est créé qui se charge d'envoyer le fichier. Jusque là rien de bien casse tête surtout que ca marche parfaitement bien avec les fichiers de petite taille. Une fois qu'on passe aux choses sérieuses genre fichier 300Mo, une SocketException est jetée:

    Software Caused Connection Abort: Socket Write Error
    Sans vouloir paraître prétentieux, je ne pense pas que mon code ou ma logique applicative en soit la cause. Je pense qu'il doit s'agir d'une histoire de timeout ou quelque chose comme cela...

    Pouvez-vous m'aider. Merci bcp !!!

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    je crois me souvenir d'un sujet identique mais je n'arrive plus à le trouver ... et ça plantait à partie de 64 ko ...

    quel type de flux utlises tu ? bufferisé ?

    montre éventuellement un bout du code ...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    J'utilise des ObjectInputStream et ObjectOutputStream pour passer les commande au serveur. Ce sont des objets sérialisés. Pas de problème à ce niveau là. Et j'utilise des BufferedInputStream et BufferedOutputStream pour envoyer les fichiers:

    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
     
    ObjectInputStream ois = new ObjectInputStream(this.client.getInputStream());
                      Commande Com = (Commande)ois.readObject();                  
     
                      byte[] tBuffer = new byte[512];
                      int lg = 0;
     
                      FileInputStream fis = new FileInputStream("C:/Test_Upload/" + Com.getFichier());
                      //BufferedInputStream bis = new BufferedInputStream(fis);
     
                      //BufferedOutputStream bos = new BufferedOutputStream(this.client.getOutputStream());
     
                      OutputStream os = this.client.getOutputStream();
     
                      do {
                            lg = fis.read(tBuffer);
                            os.write(tBuffer, 0, lg);
                            //os.flush();
     
                      } while (! nbrpacks && lg >= 512);
     
                      os.close();
                      //bos.close();
                      //bis.close();
                      fis.close();
    Voici un exemple de code du thread qui envoit le fichier. Dans cet exemple je n'utilise plus les streams bufferisés. Je n'obtiens pas l'exception mais mo appli se fige après avoir écrit 200Mo de mon fichier et cela sans aucune raison...

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par Royd938
    Je n'obtiens pas l'exception mais mo appli se fige après avoir écrit 200Mo de mon fichier et cela sans aucune raison...
    Elle se fige ? plus d'activité processeur ou mémoire ?
    C'est le thread lui-même qui se fige ou c'est le "thread appelant" ? Et de l'autre côté de la socket, que se passe t-il ? s'est figé également ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    J'ai trouvé ceci chez sun:
    WSAECONNABORTED (10053) Software caused connection abort

    A connection abort was caused internal to your host machine. The software caused a connection abort because there is no space on the socket's queue and the socket cannot receive further connections.

    WinSock description: The error can occur when the local network system aborts a connection. This would occur if WinSock aborts an established connection after data retransmission fails (receiver never acknowledges data sent on a datastream socket).

    TCP/IP scenario: A connection will timeout if the local system doesn't receive an (ACK)nowledgement for data sent. It would also timeout if a (FIN)ish TCP packet is not ACK'd (and even if the FIN is ACK'd, it will eventually timeout if a FIN is not returned).

    It seems to happen more with WindowsXP and it seems also to be possibly related to Windows firewall settings. In any case the salient point is that the abort has originated inside the local machine.
    Je développe effectivement sous Win XP SP2. Je développe en localhost. Mon appli possède un thread Serveur et créé un thread client à chaque demande de fichier => chaque appli est client et serveur. J'ai développé cette appli en C# y a 2 semaines sur la même machine et je n'ai jamais rencontré ce problème. Donc le fait que winsock soit en cause me paraît bizarre. Je vais refaire des tests pour tenter de répondre à tes questions.

  6. #6
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    essaye peut etre de découper ton fichier en plusieurs morceaux, ça devrait eviter d'emcombrer les sockets

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    Bon voilà, ce qu'il en est. Je n'ai pas réussi à trouver de solution pour les BufferedStream. J'ai donc décider d'utiliser le nouveau package java.nio et les classes ServerSocketChannel, SocketChannel, FileChannel et ByteBuffer et tout se déroule dans le meilleur des mondes. Les fichiers d'1 Go passe comme une lettre à la poste !!! Ce langage commence vraiment à me plaire.

    Merci pour votre aide et si qq'un trouve une solution pour le problème des Stream, ca m'intéresse toujours !!!

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/03/2013, 15h49
  2. Problème socket raw ? bizarre :~
    Par MonsieurAk dans le forum Windows
    Réponses: 2
    Dernier message: 12/07/2005, 14h12
  3. [MFC] Problème Socket + Connexion SQL
    Par BananaUltra3C dans le forum MFC
    Réponses: 6
    Dernier message: 20/05/2005, 16h41
  4. [Réseau] Problème socket
    Par neenee dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 18/01/2005, 15h26
  5. [SimpleDateFormat] problème d'exception
    Par julienOriano dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 12/07/2004, 17h01

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