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

Langage Java Discussion :

"Remise à zéro" inputStream (socket)


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Par défaut "Remise à zéro" inputStream (socket)
    Bonjour,

    Dans mon projet consistant à réaliser un puissance 4, je commence à développer la possibilité de jouer en réseau.
    Pour cela j'ai utiliser le Socket de Java dans une classe Client et Serveur :

    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
    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
     
    package sample;
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    public class Server extends Network{
        private ServerSocket ss;
        private Socket clientSocket;
        private ObjectOutputStream oos;
        private Inet adr;
     
        GameController gameController;
     
        public Server(GameController gameController) {
            this.gameController = gameController;
        }
     
        public void host(){
            try {
                ss = new ServerSocket(8080);
                System.out.println("J'attends qu'un client se connecte");
                clientSocket = ss.accept();
                this.gameController.etatNetwork.setText("Connecté");
                System.out.println("Un client s'est connecté");
                gameController.jeu.getChildren().clear();
                gameController.jeu.getChildren().add(new P4_network(gameController, true, this));
                gameController.jeu.setDisable(false);
                System.out.println("P4 ++");
            }
            catch(IOException e) {
                System.out.println("Oops, la création du serveur plante");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
     
        public String getAdresse() {
            return adr.getAdresse();
        }
     
        public int readToken() throws IOException, ClassNotFoundException {
            ObjectInputStream ois = new ObjectInputStream(clientSocket.getInputStream());
            int token = (Integer) ois.readObject();
            return token;
        }
     
        public void placeToken(int i) throws IOException {
            oos = new ObjectOutputStream(clientSocket.getOutputStream());
            oos.writeObject(i);
        }
     
     
        /** Closes the connection */
        void closeSocket() {
     
            try {
                this.clientSocket.close();
                ss.close();
            }
            catch (IOException e) {
                System.out.println("Erreur lors de la fermeture des sockets");
            }
     
        }
     
    }
    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
    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
     
    package sample;
    import java.io.*;
    import java.net.*;
    import java.util.*;
     
    public class Client extends Network {
        static final Scanner input = new Scanner(System.in);
     
        Socket serverSocket;
        ObjectOutputStream oos;
        private GameController gameController;
     
        /** Creates a new instance of Client */
        public Client(GameController gameController) {
            this.gameController = gameController;
        }
     
     
        public void join(String stringIP) {
            System.out.println("Quelle est l'adresse du server ?");
            try {
                serverSocket = new Socket(stringIP, 8080);
                this.gameController.etatNetwork.setText("Connecté");
                gameController.jeu.getChildren().clear();
                gameController.jeu.getChildren().add(new P4_network(gameController, false, this));
                gameController.jeu.setDisable(false);
                System.out.println("P4 ++");
            } catch (Exception e) {
                System.out.println("Serveur non trouvé ou erreur lors de la connexion au serveur.");
                System.out.println("Vérifiez que celui-ci existe.");
            }
        }
     
        public int readToken() throws IOException, ClassNotFoundException {
            ObjectInputStream ois = new ObjectInputStream(serverSocket.getInputStream());
            int token = (Integer) ois.readObject();
            return token;
        }
     
        public void placeToken(int i) throws IOException {
            oos = new ObjectOutputStream(serverSocket.getOutputStream());
            oos.writeObject(i);
        }
     
     
        /** Closes the connection */
        void closeSocket() {
     
            try {
                serverSocket.close();
            }
            catch (IOException e) {
                System.out.println("Erreur lors de la fermeture des sockets");
            }
     
        }
     
    }
    Mais voila mon problème: lors que je lance le jeu en réseau, j'appelle toutes les 2 secondes une fonction afin de checker les valeur envoyé par socket afin d'actualiser ma grille de jeu en fonction de ce qu'à jouer l'autre.

    fonction

    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
     
    private void refreshGame() {
            Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(2), e -> {
                if (tourRouge == isMyTurn) {
                    disabledClickColumn(false);
                }
                else { // quand l'autre joue
                    int c = -1;
                    if (!tourRouge) {
                        try {
                            c = network.readToken();
                        } catch (IOException | ClassNotFoundException ex) {
                            ex.printStackTrace();
                        }
                        try {
                            insererJeton(new Jeton(!isMyTurn), c);
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    }
                    changeTour();
                }
            }));
            timeline.setCycleCount(Timeline.INDEFINITE);
            timeline.play();
        }
    Seulement, si supposons je joue en colonne "1" (donc le 1 est envoyé sur le socket), à la prochaine boucle de ma fonction, si je fais rien, la fonction va lire le "1" précédement envoyé.

    Voila pourquoi j'aimerai savoir comment remmettre à zéro l'inputStream comme lorsque je lance la premiere le programme avant d'envoyer ma première valeur.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    ça ne marche pas comme ça. On ne regarde pas "toutes les deux secondes" ce que la socket a à lire.
    On lit la socket tout le temps, avec un thread qui en a la charge, et on laisse la lecture bloquer quand la socket n'a rien pour l'instant à dire. Et quand elle dit quelque chose et donc qu'on a lu un truc, on réagit en fonction de ce qu'on a lu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Par défaut
    Ah ok.

    Tu aurais un lien à me passer où il explique ce procédé?

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

Discussions similaires

  1. remise à zéro d'un autonumber
    Par Pitou5464 dans le forum Access
    Réponses: 4
    Dernier message: 08/08/2006, 11h56
  2. Remise à zéro de NuméroAuto
    Par Fougère dans le forum Access
    Réponses: 6
    Dernier message: 12/07/2006, 12h38
  3. Timer : remise à zéro
    Par hammag dans le forum Langage
    Réponses: 3
    Dernier message: 20/04/2006, 17h31
  4. Remise à zéro du fichier d'alerte <SID>ALERT.LOG
    Par pablo13 dans le forum Administration
    Réponses: 2
    Dernier message: 05/10/2004, 17h19

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