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

Développement Web en Java Discussion :

Socket qui se ferme sans raison


Sujet :

Développement Web en Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Points : 73
    Points
    73
    Par défaut Socket qui se ferme sans raison
    Bonjour,

    Je suis entrain de faire un petit jeu de uno online, et je suis dans les début de l'application.
    Voici ce que mon appli devrait faire :
    1) Le client entre son login
    2) La connection au serveur s'établie
    3) Le client envoie les données pour le login et le mot de passe
    4) Le serveur reçoit et va checker dans la base de donnée
    5) Si c'est bon il renvoie une confirmation positive au client sinon un rejet.
    6) Le client reçoit et affiche un message.

    Au point 5 tout flanche, des deux côtés. Au moment ou le serveur crée l'objet ObjectOutputStream et le client l'objet ObjectInputStream
    , des deux côtés ils me disent que le socket est fermé. J'ai vérifié ligne par ligne avec debug ou sans le client et le server, mais à aucun moment il ne ferme le socket. Je vous donne les consoles d'erreur car celui du client est spécial.

    Je vous donne aussi le code associé au bouton d'envoi du client:
    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
    String nickname = jTextFieldNickname.getText();
            String password = jTextFieldPassword.getText();
            String answer = null;
            if(!nickname.isEmpty() && !password.isEmpty()){
                try {
                    Player player = new Player(nickname, password);
                    cmdToServer cmd = new cmdToServer(network);
                    answer = cmd.ConnectServer(player);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(menuHome.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(menuHome.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            JOptionPane jop1 = new JOptionPane();
            JOptionPane.showMessageDialog(null, "Message informatif", " Connection reussie :"+answer, JOptionPane.INFORMATION_MESSAGE);
    Voici le code de la méthode network du client.
    L'erreur se trouve à cet endroit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    in = new ObjectInputStream(skt.getInputStream());
    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
    public class Network {
     
        private Socket skt;
        private ObjectOutputStream out;
        private ObjectInputStream in;
     
        public Network(){
     
         try {
             openConnection();
          }
          catch(Exception e) {
                try {
                    System.out.print("Whoops! It didn't work! : +" + e.getMessage() + "\n");
                    skt.close();
                    System.out.println("Socket closed\n");
                } catch (IOException ex) {
                    Logger.getLogger(Network.class.getName()).log(Level.SEVERE, null, ex);
                }
          }
     
        }
     
     
        /* Open the connection */
        private void openConnection() throws IOException{
     
            skt = new Socket("192.168.1.34", 1991);
            System.out.println("Connection to the server.");
        }
     
         public void writeObject(Object object) throws java.io.IOException{
            out = new ObjectOutputStream(skt.getOutputStream());
            out.writeObject(object);
     
            System.out.print("Packet sent : "+object.getClass()+" - to "+ skt.getInetAddress() +"\n");
     
            out.flush();
     
            out.close();
     
         }
     
         public Object readObject() throws java.io.IOException, ClassNotFoundException{
             if(in == null){
             in = new ObjectInputStream(skt.getInputStream());
             }else{
     
             }
     
             Object object = in.readObject();
     
             in.close();
     
             System.out.print("Packet receive : "+object+" - from "+ skt.getInetAddress() +"\n");
     
             return object;
     
         }
     
         public void closeConnection(){
            try {
                this.in.close();
                this.out.close();
                this.skt.close();
            } catch (IOException ex) {
                Logger.getLogger(Network.class.getName()).log(Level.SEVERE, null, ex);
            }
         }
     
    }
    Ici la méthode ConnectServer employé plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public String ConnectServer(Player player) throws IOException, ClassNotFoundException {
            cmdToClient ctc = new cmdToClient();
            Data data = new Data();
            data.setData("CONNECT:playerConnectServer");
            Object[] o = {player};
            data.setObject(o);
            network.writeObject(data);
            return ctc.analyse(network.readObject());
        }
    Citation Envoyé par Console serveur
    New connection !
    Number of thread : 3
    Packet receive : uno.Data@1050169 - from /192.168.1.37
    class uno.Player
    192.168.1.37
    java.net.SocketException: Socket is closed
    It didn't work! - Socket is closed
    Supression of the addres : 192.168.1.37
    Closing socket : 192.168.1.37
    at java.net.Socket.getOutputStream(Socket.java:808)
    Thread 192.168.1.37 interrupted
    at unoserver.Network.writeObject(Network.java:23)
    at unoserver.cmdToServer.acceptedConnect(cmdToServer.java:186)
    at unoserver.cmdToServer.getPlayerConnectServer(cmdToServer.java:174)
    at unoserver.cmdToServer.analyse(cmdToServer.java:75)
    at unoserver.Server$ServerData.run(Server.java:94)
    at java.lang.Thread.run(Thread.java:619)

    Citation Envoyé par Console client
    Connection to the server.
    Packet sent : class uno.Data - to /192.168.1.34
    8 juil. 2009 11:29:04 unoclient.menuHome jButtonOKActionPerformed
    GRAVE: null
    java.net.SocketException: Socket is closed
    at java.net.Socket.getInputStream(Unknown Source)
    at unoclient.Network.readObject(Network.java:63)
    at unoclient.cmdToServer.ConnectServer(cmdToServer.java:67)
    at unoclient.menuHome.jButtonOKActionPerformed(menuHome.java:129)
    at unoclient.menuHome.access$100(menuHome.java:24)
    at unoclient.menuHome$2.actionPerformed(menuHome.java:70)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
    ce)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Avez-vous une idée ?

    Cordialement,

    rXp>!<

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Tu fermes les flux dans tes méthodes de lecture/écriture dans la classe Network. Lorsque le flux est fermé, il n'est plus réutilisable.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 165
    Points : 73
    Points
    73
    Par défaut
    Oh mon dieu, tu as raison, ce que je suis bête... Merci beaucoup, petite erreur de débutant tête en l'air

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

Discussions similaires

  1. [JMeter] Des unités qui se bloquent sans raison
    Par Arnica dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 28/12/2010, 12h43
  2. Job sql qui se désactive sans raison
    Par panif dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/05/2008, 14h10
  3. [MySQL] Un if qui passe à else sans raison
    Par SnoT- dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/01/2008, 13h06
  4. fenêtre qui s'élargit sans raison apparente
    Par Lcf.vs dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 24/11/2007, 22h02
  5. Access se ferme sans raison
    Par ChBro dans le forum Access
    Réponses: 1
    Dernier message: 24/08/2006, 21h06

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