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 :

IOException sur socket dans un package


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut IOException sur socket dans un package
    Bonjour,

    voilà deux jours qu'un problème me titille le cerveau (et accessoirement les cheveux).

    J'ai conçu des petites classes serveur/client threadées et sérialisées. J'ai tout d'abord tout mis en vrac dans un repertoire et fait mes tests dessus. Pas de probleme tout marchait bien. Je me decide à en faire un package. Donc je cree un repertoire (disons "monsock") et j'ajoute donc l'entete "package monsock;" qui va bien à tous les fichiers.
    Je me decide a restester (avec les memes programmes de tests que précédemment), en ajoutant bien sur "import monsock.*;". Et là .... Tout se lance bien, le client est accepté par le serveur mais au moindre envoi (ici du client vers le serveur) la lecture sur mon ObjectInputStream recupere une IOException ...
    Je ne vois absolument d'ou vient ce probleme.

    Faut il faire quelque chose de particulier pour mettre des classes utilisant les sockets ou les threads dans un package ?

    Merci d'avoir tout bien lu et bien sur merci de m'aider .

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je te propose de mettre ton code et ton exception ici.
    Cela n'est a mon avis pas lié directement au package.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    ok je l'ai pas sous la main là, je le posterai vers 16h.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    voici le code du de l'envoi et de reception d'un objet serialisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	public void send(Receivable r) {
    		try {
    			out.flush();
    			out.writeObject(r);
    			out.flush();
    		}
    		catch (IOException e) { }
    		catch (NullPointerException 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
     
    	public void run() {
    		while (!stop) {
    			try {
    				Object o;
    				o =  in.readObject();
    				if (o instanceof Receivable) {
    					rM.traiter(id, (Receivable) o);
    				}
    				//in.close();
    				//in = new ObjectInputStream(sock.getInputStream());
    			}
    			catch (IOException e) {
    				System.out.println("Connexion interrompue.");
    				rM.traiter(id, new NotConnectedException());
    				this.kill();
    			}
    			catch (ClassNotFoundException e) { System.out.println("Reception d'un objet non valide");  } //l'objet recu n'est pas conforme
    		}
    	}
    Mon objet rm est un gestionnaire de reception chargé de traiter les objets qui arrivent.

    Je teste ces classes avec :

    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
     
    package seance;
     
    class MonGestServeur implements ReceivableManager {
    	public void traiter(int id, Receivable r) {
    		System.out.println("Bien recu : "+r);
    	}
    }
     
    public class MonServeur {
    	public static void main(String[] args) {
    		Serveur serveur = new Serveur("mon serveur",8080);
    		ReceivableManager gest = new MonGestServeur();
    		serveur.attach(gest);
    		serveur.start();
    		System.out.println(""+serveur);
    		try {
    			Thread.sleep(500);
    		}
    		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
     
    package seance;
     
    class MonGestClient implements ReceivableManager {
    	public void traiter(int id, Receivable r) {
    		System.out.println("Bien recu : "+r);
    	}
    }
     
    public class MonClient {
    	public static void main(String[] args) {
    		Client client = new Client("mon client","127.0.0.1",8080);
    		ReceivableManager gest = new MonGestClient();
    		client.attach(gest);
    		client.start();
    		System.out.println(""+client);
    		try {
    			client.send(new Message(0));
    			Thread.sleep(500);
    		}
    		catch(Exception e) { }
    		System.exit(0);
    	}
    }
    (remarquez au passage que les fichiers de tests sont ici dans le meme package "seance').

    Resultat de tout ca:
    java seance/MonServeur
    Serveur mon serveur
    o port: 8080
    o connections actives: 0
    o actif depuis: 0h. 0m. 0s.
    Connection enregistrée (1)
    Connexion interrompue.
    Bien recu : seance.NotConnectedException
    et
    java seance/MonClient
    Client mon client
    o port: 8080
    o adresse: 127.0.0.1
    o actif depuis: 0h. 0m. 0s.
    Connexion interrompue.
    Bien recu : seance.NotConnectedException
    La connection est interrompue (IOException) des la reception d'un objet. Donc le serveur traite une NotConnectedException (Exception perso) et coupe la connection vers le client donc le client voit sa connexion interrompue. (la fin est normale).

    Je reprécise que lorsque je ne fais aucun package tout marche bien.

    Je precise l'erreur:
    java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2502)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1267)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
    at seance.ConnectionThread.run(ConnectionThread.java:63)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Erreur tres tres bete : j'avais oublié de faire un extends Serializable sur mon interface perso Receivable (les fichiers qui etaient envoyés par les connections)...

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

Discussions similaires

  1. TImageList sur DataModule dans Package ?
    Par GoustiFruit dans le forum Débuter
    Réponses: 8
    Dernier message: 24/06/2008, 18h15
  2. Réponses: 2
    Dernier message: 27/12/2005, 13h03
  3. Notion sur Socket UDP
    Par oxor3 dans le forum Développement
    Réponses: 3
    Dernier message: 05/04/2004, 01h19
  4. [VB6] Obtenir +sieurs lignes sur RptTextBox dans un DataReport
    Par Babaframy dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 24/01/2004, 13h10
  5. [VB6] [MSHFlexGrid] Tri sur clic dans la première ligne
    Par degreste dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/03/2003, 01h42

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