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

Java Discussion :

Programmation réseau - Initialiser la connexion


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut Programmation réseau - Initialiser la connexion
    Bonjour,

    Je suis bloqué sur mon projet de communication réseau. Voiçi mon code côté serveur :

    Serveur.java
    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
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    /**
     *
     * @author Nicolas
     */
    public class Serveur extends Thread
    {
     
            public static void main(String[] args) {
                try {
                    ServerSocket server = new ServerSocket(4455);
                    System.out.println("Serveur:"+server+" en écoute sur le port: "+ server.getLocalPort()+" est lancé");
                    while (true) {
                        Socket connexion = server.accept();
                        System.out.println("Serveur connexion avec: "+ connexion);
                        Thread echo=new ServeurThread(connexion);
                        echo.start();
                        }
                }catch (IOException ex) {
                    System.out.println("le port 4455 est occupé");
                    System.out.println("On suppose donc que le service est lancé");
                }
                }
            }
    ServeurThread.java
    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
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.SocketException;
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    /**
     *
     * @author Nicolas
     */
    public class ServeurThread extends Thread {
     
        Socket connexion;
        IOServeur server;
     
        public ServeurThread(Socket connexion) {
            this.connexion=connexion;
            server = new IOServeur();
        }
     
         public void run()  {
             while (true) {
                 String ligne;
                 ligne = server.lireClient();
                 server.ecrireServeur("Serveur a reçu: "+ligne+" de "+connexion);
                 server.FlushLine();
                 server.ecrireClient("Bien reçu");
                 if (ligne.equals("."))
                     server.close();
                 break;
             }
     
        }    
    }
    IOServeur.java
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    /**
     *
     * @author Nicolas
     */
    class IOServeur {
        private BufferedReader lectureServeur;
        private PrintStream ecritureServeur;
     
        private BufferedReader lectureClient;
        private PrintStream ecritureClient;    
        private Socket client;
     
        public IOServeur(){       
            ecritureServeur = System.out;
            lectureServeur = new BufferedReader(new InputStreamReader(System.in));
     
            //Reseau
            try {
                lectureClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            try {
                ecritureClient = new PrintStream(client.getOutputStream(),true);
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
        public void ecrireServeur(String texte){
            ecritureServeur.print(texte);
        }
     
        public String lireServeur(){
            try {
                return(lectureServeur.readLine());
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            return "Erreur : rien à dire";
        }
     
        //RESEAU
     
        public void ecrireClient(String texte){
            ecritureClient.println(texte);
        }
     
        public String lireClient(){
            try {
                return(lectureClient.readLine());
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            return "Erreur : impossible de recupérer un autre message";
        }
     
        public void close(){
            try {
                lectureClient.close();
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            ecritureClient.close();
     
            try {
                lectureServeur.close();
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            ecritureServeur.close();
        }
     
        public void FlushLine() {
            try {
                lectureClient.readLine();
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    Le problème survient dans IOServeur.java. A la connexion du client (donc transmission du socket, tout se déroule comme prévu, mais ça bloque dans IOServeur.java à la ligne 36. Il ne trouve pas lInputStream client. Par analogie, je suppose qu'il y a le même souàçis dans le OutputStream client.

    ERREUR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception in thread "main" java.lang.NullPointerException
    	at IOServeur.<init>(IOServeur.java:36)
    	at ServeurThread.<init>(ServeurThread.java:28)
    	at Serveur.main(Serveur.java:30)
    Java Result: 1
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est surtout qu'à aucun moment tu n'attribue de valeur à ton champ client dans IOServeur. Donc client est null, donc nullpointerException.

  3. #3
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par Nicotyrox Voir le message
    Bonjour,

    Je suis bloqué sur mon projet de communication réseau. Voiçi mon code côté serveur :

    Serveur.java
    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
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    /**
     *
     * @author Nicolas
     */
    public class Serveur extends Thread
    {
     
            public static void main(String[] args) {
                try {
                    ServerSocket server = new ServerSocket(4455);
                    System.out.println("Serveur:"+server+" en écoute sur le port: "+ server.getLocalPort()+" est lancé");
                    while (true) {
                        Socket connexion = server.accept();
                        System.out.println("Serveur connexion avec: "+ connexion);
                        Thread echo=new ServeurThread(connexion);
                        echo.start();
                        }
                }catch (IOException ex) {
                    System.out.println("le port 4455 est occupé");
                    System.out.println("On suppose donc que le service est lancé");
                }
                }
            }
    ServeurThread.java
    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
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.SocketException;
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    /**
     *
     * @author Nicolas
     */
    public class ServeurThread extends Thread {
     
        Socket connexion;
        IOServeur server;
     
        public ServeurThread(Socket connexion) {
            this.connexion=connexion;
            server = new IOServeur();
        }
     
         public void run()  {
             while (true) {
                 String ligne;
                 ligne = server.lireClient();
                 server.ecrireServeur("Serveur a reçu: "+ligne+" de "+connexion);
                 server.FlushLine();
                 server.ecrireClient("Bien reçu");
                 if (ligne.equals("."))
                     server.close();
                 break;
             }
     
        }    
    }
    IOServeur.java
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintStream;
    import java.net.Socket;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
     
    /**
     *
     * @author Nicolas
     */
    class IOServeur {
        private BufferedReader lectureServeur;
        private PrintStream ecritureServeur;
     
        private BufferedReader lectureClient;
        private PrintStream ecritureClient;    
        private Socket client;
     
        public IOServeur(){       
            ecritureServeur = System.out;
            lectureServeur = new BufferedReader(new InputStreamReader(System.in));
     
            //Reseau
            try {
                lectureClient = new BufferedReader(new InputStreamReader(client.getInputStream()));
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            try {
                ecritureClient = new PrintStream(client.getOutputStream(),true);
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
        public void ecrireServeur(String texte){
            ecritureServeur.print(texte);
        }
     
        public String lireServeur(){
            try {
                return(lectureServeur.readLine());
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            return "Erreur : rien à dire";
        }
     
        //RESEAU
     
        public void ecrireClient(String texte){
            ecritureClient.println(texte);
        }
     
        public String lireClient(){
            try {
                return(lectureClient.readLine());
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            return "Erreur : impossible de recupérer un autre message";
        }
     
        public void close(){
            try {
                lectureClient.close();
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            ecritureClient.close();
     
            try {
                lectureServeur.close();
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
            ecritureServeur.close();
        }
     
        public void FlushLine() {
            try {
                lectureClient.readLine();
            } catch (IOException ex) {
                Logger.getLogger(IOServeur.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    Le problème survient dans IOServeur.java. A la connexion du client (donc transmission du socket, tout se déroule comme prévu, mais ça bloque dans IOServeur.java à la ligne 36. Il ne trouve pas lInputStream client. Par analogie, je suppose qu'il y a le même souàçis dans le OutputStream client.

    ERREUR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception in thread "main" java.lang.NullPointerException
    	at IOServeur.<init>(IOServeur.java:36)
    	at ServeurThread.<init>(ServeurThread.java:28)
    	at Serveur.main(Serveur.java:30)
    Java Result: 1
    Merci d'avance.
    je te propose de faire les modifications suivantes:
    dans la classe ServeurThread:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public ServeurThread(Socket connexion) {
                    server = new IOServeur(connexion);
        }
    Dans la classe IOServeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public IOServeur(Socket client){       
    this.client = client;
            ecritureServeur = System.out;
            lectureServeur = new BufferedReader(new InputStreamReader(System.in));
    ....
    }

Discussions similaires

  1. Programmation réseau : socket et thread
    Par roms712 dans le forum POSIX
    Réponses: 12
    Dernier message: 12/01/2007, 17h27
  2. [Réseau] partage de connexion Internet
    Par Pfeffer dans le forum Windows XP
    Réponses: 17
    Dernier message: 21/06/2006, 23h14
  3. Erreur dans un programme php pour une connexion à une bdd
    Par gaetan.tranvouez dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/06/2006, 21h06
  4. Pour débuter en programmation réseau
    Par durnambule dans le forum Développement
    Réponses: 3
    Dernier message: 20/06/2004, 22h21
  5. [Réseau] Créer une connexion Internet
    Par Tranber dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/10/2002, 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