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 :

Pb de read jamais = -1


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut Pb de read jamais = -1
    Salut,

    Voilà je m'adresse à vous car je galère pas mal sur un pb de folie !

    J'envoi le contenu d'un fichier avec ma méthode "sendFile" du client au serveur et ça arraive jusqu'à la fin du fichier super bien.
    Par contre, le serveur arrive à écrire le fichier via la méthode "stock" mais ne sort jamais de la boucle while, ne trouvant jamais une valeur égale à -1.

    Avez vous une idée ? ça fait 2 jours que je suis dessus je n'ai plus d'idée!

    Merci d'avance pour vos réponses !

    Go

    Voici le code des méthodes :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    	public void sendFile( Socket clientSocket )
    	{
    		System.out.println("ENVOI DU FICHIER AU SERVEUR :");
    		DataOutputStream dataOut = null;
    		FileInputStream fis = null;
     
    		try
    		{
    	        //Création d"un buffer de 4K
    	        byte[] buffer= new byte[4096];
    	        int bytes = 0;
     
    		dataOut = new DataOutputStream(clientSocket.getOutputStream());
    			fis = new FileInputStream(System.getProperty("user.dir") + "/" + fileName());
     
    	        System.out.println("DEBUT ENVOI DU FICHIER");
    	        while((bytes = fis.read(buffer,0,buffer.length)) != -1)
    	        {
    	        	dataOut.write(buffer, 0, bytes);
     
    	        	for( int i = 0; i < buffer.length; i++)
    	        		System.out.println(buffer[i]);
    	        }
     
    	        System.out.println("FIN ENVOI DU FICHIER");
     
    	        fis.close();
    		}
    		catch(IOException ioe)
    	    {
    	        System.out.println("Erreur d'IO : "+ioe);
    	    }
    		finally
    		{
    			try
    			{
    				fis.close();
    			}
    			catch (IOException e)
    			{
    				e.printStackTrace();
    			}
    		}
    	}
     
     
     
    	public void stock( Socket clientSocket )
    	{
    		DataInputStream dataIn = null;
    		FileOutputStream fos = null;
    		File fichier = null;
     
    		try
    		{
    		   int i;
    		   dataIn = new DataInputStream(clientSocket.getInputStream());
    		   fichier = new File(System.getProperty("user.dir") + "/" + fileName());
     
    		   fos = new FileOutputStream(fichier); // Ecriture dans le fichier
     
    		   System.out.println("DEBUT ECRITURE DU FICHIER");
    		   while((i = dataIn.read()) != -1)
    		   {
    		       fos.write(i);
    		       System.out.println(i);
    		   }
    		   System.out.println("FIN ECRITURE DU FICHIER");
     
    		}
    		catch (IOException e1)
    		{
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
    		finally
    		{
    			try
    			{
    				fos.close();
    			}
    			catch (IOException e2)
    			{
    				e2.printStackTrace();
    			}
    		}
     
    	}

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Ce que je remarque au premier coup d'oeil sans trop regarder dans le detail :

    tu essayes de fermer 2 fois fis (celle dans le finally est bien mais celle avant le catch ne sert a rien).

    Tu ne ferme jamais dataOut. Doncà rajouter avec fis dans le finally!
    Idem pour dataIn.

    Essaye juste c'est petite changement la et dit moi si ca change quelque chose.

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut
    Merci de ta réponse!
    J'ai fait ce que tu m'as dit et le fichier passe bien, par contre j'ai une erreur après dans ma boucle découte (un readObject ds un while(true) ) qui fait appel à ces 2 méthodes car en faisant le dataIn.close() il ferme la connection d'entrée de la socket. Donc mon readObject lance une exception.
    Y a-t-il possibilité de contrer ce pb ?

    Merci encore

  4. #4
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    ????? J'ai pas tout capté la.
    Pourquoi il y a un readObjet avec un while(true) c'est quoi ce code?

    Sinon c'est clair que si tu te sers d'un truc ouvert dans ce code ailleurs qu'ici il ne faut pas le fermer tout de suite.

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut
    En fait j'ai un truc de ce style coté client :

    while(true)
    {
    ois = readObject()

    if( ois.getClass() == "transfertfichier")
    {
    sendFile( socketclient )
    }

    }

    et coté serveur j'ai un truc de ce style :

    while(true)
    {
    ois = readObject()

    stock( socketclient )
    }

    }


    Les méthodes stock et sendFile sont celles précisées ds mon ancien msg.

    Donc qd je fais un dataOut.close() ds sendFile(), ça ferme la socket donc mon ois de mon client génère une erreur.

    Vois-tu le pb? Et si oui as-tu une solution ?

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut
    et si je ne le ferme pas, le transfert du fichier ne se termine pas côté serveur.

Discussions similaires

  1. read committed, serializable... et par défaut k'en est-il?
    Par superdada dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 01/12/2003, 18h58
  2. Ne jamais mettre le focus sur un tbutton, possible
    Par portu dans le forum Composants VCL
    Réponses: 4
    Dernier message: 03/07/2003, 15h06
  3. [LG]problème de read / readln
    Par jeremie60 dans le forum Langage
    Réponses: 7
    Dernier message: 08/06/2003, 23h33
  4. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 10h30
  5. CheckBox en Read Only
    Par MrJéjé dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2002, 15h00

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