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 :

[ObjectInputStream et getInputStream] Exception louche


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Points : 42
    Points
    42
    Par défaut [ObjectInputStream et getInputStream] Exception louche
    Bonjour a tous!

    Je tente de faire un serveur et un client qui s'echange des objets en tout genre.

    Je lance le serveur qui ecoute les connections sur le port 6666.
    Tout se passe bien
    Je demande a un client de se connecter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try{
                try{
                    Socket socket = new Socket("127.0.0.1", 6666);
                }catch (UnknownHostException e){
                    System.out.println("erreur : " + e.getMessage() );
                }
            }catch(IOException e ){
                System.out.println("erreur : " + e.getMessage() );
            }
    ça a l'air de fonctionner je n'ai pas d'erreur
    mais du coté serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    this.socket = serveur.accept();
    try {
    	this.entree = new ObjectInputStream( this.socket.getInputStream() );
    } catch (IOException e) {
    	System.err.println("Erreur avec ce socket lors de l'instanciation de l'entrée : " + socket.toString() + " -> " + e.getMessage());
    }
    J'ai cette erreur:

    Erreur avec ce socket lors de l'instanciation de l'entrée : Socket[addr=/127.0.0.1,port=44897,localport=6666] -> null

    Par contre une ligne en dessous j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
    	this.sortie = new ObjectOutputStream( this.socket.getOutputStream() );
    } catch (IOException e) {
    	System.err.println("Erreur avec ce socket lors de l'instanciation de la sortie : " + socket.toString() );
    }
    Cette partie fonctionne.

    le client essaye bien de se connecter sur le port 6666. Je ne sais pas d'ou ça vient quelqu'un a une idée ? Seul le inputStream foire pas le outputStream

  2. #2
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Dans ta trace, l'IOException vaut null ! Je demande d'ailleurs comment tu fais pour obtenir un tel truc. Bref ton problème vient sûrement d'une mauvaise gestion des exceptions, sentiment renforcé par le fait que tu utilises des try imbriqués dans la première portion de code que tu nous donnes.

  3. #3
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Ce n'est pas l'IOException qui est null, c'est simplement qu'il y a un NullPointerException quelque part... Reste à trouver où...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.socket = serveur.accept();
    this.entree = new ObjectInputStream( this.socket.getInputStream() );
    Utilises-tu plusieurs threads qui peuvent accéder à this.socket?
    Car les seules choses qui peut-être null ici, c'est socket et socket.getInputStream(), qui manifestement ne peuvent pas être null au sein d'un seul thread...

    Peut-être que ton code posté n'est pas assez complet par rapport à ton vrai code?

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Points : 42
    Points
    42
    Par défaut
    Voici mon code d'origine. Je met qu'une partie du code sinon je vais faire un roman :p.

    Alors vous avez ici le constructeur de la classe client géré par le serveur. Les commentaires parlent d'eux meme.


    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
     
    	/** Constructeur de la classe client. Initialise les données.
              * @param socket Le Socket doit etre deja instancié par un accept() d'un serveur.
              * @param delaiInactivite Le delai avant que le client ne se deconnecte automatiquement.
              * @param rafraichissement Durée de l'attente du client entre ses actions de bases.
              */
    	Client(Socket socket , int delai_inactivite , int rafraichissement){
    		this.socket = socket;
    		this.inactivite = 0;
    		this.delai_depasse = false;
    		this.delai_inactivite = delai_inactivite;
    		this.rafraichissement = rafraichissement;
    		this.reception = new LinkedBlockingQueue();
    		this.emmission = new LinkedBlockingQueue();
                    try {
    			sortie = new ObjectOutputStream( this.socket.getOutputStream() );
    		} catch (IOException e) {
    			System.err.println("Erreur avec ce socket lors de l'instanciation de la sortie : " + socket.toString() );
    		}
    		try {
    			 entree = new ObjectInputStream( this.socket.getInputStream() );
    		} catch (IOException e) {
    			System.err.println("Erreur avec ce socket lors de l'instanciation de l'entrée 1 : " + socket.toString() + " -> " + e.getMessage());
                    }
    	}

    Alors m'aintenant la classe serveur.

    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
     
    	/** Ajoute un client qui souhaite se connecter a la liste des clients */
    	private void connectionClient(){
    		while ( marche_arret ){
    			if (! estPlein() ){
    				try{
    					Socket so = serveur.accept();
    					Client c = new Client(so,inactivite_max,rafraichissement);
    					liste_clients.add(c);
    					nb_client++;
    				}catch  (IOException e){
    					System.err.println("Erreur lors de l'acceptation de connection d'un client : " + e.getMessage() );
    				}	
    			}
    		}
    	}
    Mon serveur est bien initialisé par ce constructeur et ne met aucune erreur.

    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
     
    	Serveur(int port , int nb_client_max , String version_client , int inactivite_max , int rafraichissement, String url , String login , String mdp){
    		this.port = port;
    		this.nb_client_max = nb_client_max;
    		this.serveur = null;
    		this.nb_client = 0;
    		this.inactivite_max = inactivite_max;
    		this.rafraichissement = rafraichissement;
    		this.liste_clients = new LinkedList();
    		this.version_client = version_client;
    		demarrer();
    		connectionBase(url,login,mdp);
    	}
     
    	/** Ouvre le socket d'ecoute du serveur */
    	private void demarrer(){
    		try{
    			serveur = new ServerSocket(port);
                marche_arret = true;
    		}catch (IOException e) {
    			System.err.println("Erreur lors de l'ouverture du port du serveur : " + e.getMessage() );
    		}
    	}
    Se code vous suffit il ?

Discussions similaires

  1. Exception en utilisant ObjectInputStream
    Par tiamat dans le forum Général Java
    Réponses: 9
    Dernier message: 23/08/2013, 15h31
  2. Réponses: 1
    Dernier message: 11/06/2009, 05h17
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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