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 :

Serveur 1-N pour jeu de Black jack


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Serveur 1-N pour jeu de Black jack
    Bonjour,

    J'aimerais réaliser un jeu de Black jack en Java jouable sur plusieurs machines sur le même réseau.
    J'ai déjà commencé et je bloque pas mal sur quelques points.
    Tout d'abord, j'utilise des SocketChannel et BufferByte pour communiquer avec plusieurs clients simples.
    Le problème c'est que j'arrive bien à réceptionner dans le bufferbyte le message envoyé par le client grace à la méthode : channel.read(buf)
    Je possède donc un BufferByte nommé buf et je souhaite donc le renvoyer à tous les clients présents sur le réseau.
    Jusque là rien de compliquer, le problème est que j'aimerais réceptionner le buffer, le modifier à ma guise en ajoutant par exemple des données : exemple le client A m'envoie le message "A" et j'aimerais envoyer à tous les clients le message "AetB", donc il faut que j'ajouet "etB" au buffer.
    Voici la méthode que j'ai utilisée et qui bien sur ne fonctionne pas (les clients ne recoivent pas ce que j'attend mais des choses bizzares genre pleins de carrés etc..) Voici mon code :

    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    public class ServeurNIO {
        public static void main(String[] args) {
            int port = 1080;String msg = "ok mon ptit chou";
            try {
                //Vector list = new Vector();
                // ouvrir un selecteur
                Selector selecteur = Selector.open();
                // ouvrir un serveur non bloquant sur le port
                ServerSocketChannel server = ServerSocketChannel.open();
                server.configureBlocking(false);
                server.socket().bind(new InetSocketAddress(port));
                server.register(selecteur, SelectionKey.OP_ACCEPT);
                // definir un tampon de 1024 bytes
                ByteBuffer buffer = ByteBuffer.allocate(10);
               //CharBuffer b2 = buffer.asCharBuffer();
                //tq il y a des elements dans le selecteur
                while (selecteur.select() > 0) {
                    //balayer les cles du selecteur
                    Set<SelectionKey> selectedKeys = selecteur.selectedKeys();
                    Iterator<SelectionKey> i = selectedKeys.iterator();
                    while (i.hasNext()) {
                        SelectionKey key = i.next();
                        i.remove();
                        // si la cle (canal) peut etre acceptee 
                        if (key.isAcceptable()) {
                        	// l'accepter et redefinir l'option du canal dans le selecteur (pour lire les donnees)
                            SocketChannel socket = server.accept();
                            socket.configureBlocking(false);
                            socket.register(selecteur, SelectionKey.OP_READ);
                        } 
                        // si la cle (canal) peut etre lue 
                        else if (key.isReadable()) {
                        	//récupérer le canal
                            SocketChannel channel = (SocketChannel) key.channel();
                            int len;
                            try {
                            	//lire dans le canal
                                len = channel.read(buffer);
                                // s'il n'y a plus d'elements, fermer le canal et le desinscrire du selecteur
                                if (len <= 0) {
                                    channel.keyFor(selecteur).cancel();
                                    channel.close();
                                } 
                                else 
                                {
                                	//sinon, afficher le buffer
                                   buffer.flip();
                                    System.out.write(buffer.array(), 0, len);
                                    // et le transmettre a tous les clients
                                    Set<SelectionKey> keys = selecteur.keys();
                                    Iterator<SelectionKey> i2 = keys.iterator();
     
     
     
     
                                    while (i2.hasNext()) {
                                       //buffer.clear();
                                        System.out.println("Client existant");
                                        SelectionKey key2 =  i2.next();
                                        //verifier que la cle vient d'un client
                                        if (key2.channel() instanceof SocketChannel) {
                                            SocketChannel otherChannel = (SocketChannel) key2.channel();
                                           //System.out.println("Client trouvé");
                                           //System.out.println("Contenu du buffer:");
     
                                    //affiche(buffer);
                                          //  buffer.clear();
     
                                           //b2.put("toto");
                                           //b2.flip();
     
                                          // buffer.put(msg.getBytes());
                                           buffer.flip(); 
                                        buffer.rewind();
                                              for(int z=0 ; z<10;z++)
                                              {
                                                  buffer.put("E".getBytes());
                                              }
     
     
     
                                           buffer.rewind();
                                          otherChannel.write(buffer);
                                          /*  if (channel.equals(otherChannel)) {
                                            
                                                
                                                
                                                //rembobiner le buffer
                                                
                                                buffer.rewind();
                                                // le transmettre au client
                                                //System.out.println("J'envois un message au client");
                                                otherChannel.write(buffer);
                                            }*/
                                        }
                                    }
                                    buffer.clear();
                                    System.out.println("Le buffer est vidé");
                                }
                            } catch (IOException e) {
                                e.printStackTrace();
                                try {
                                    channel.keyFor(selecteur).cancel();
                                } catch (Exception e2) {
                                }
                            }
                        }
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    Voila merci d'avance pour votre aide et de votre patience.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    up

Discussions similaires

  1. [Débutant] Jeu de Black-jack sur java's cool !
    Par totoys40 dans le forum Langages
    Réponses: 0
    Dernier message: 15/05/2014, 18h29
  2. generateur de nombre aleatoire(jeu du black jack)
    Par Saanvision dans le forum Débuter
    Réponses: 8
    Dernier message: 19/11/2012, 19h10
  3. Jeu de black jack : montrer les cartes
    Par mamili dans le forum Flash
    Réponses: 1
    Dernier message: 15/12/2008, 08h24
  4. Socket Serveur pour jeu réseau 2D
    Par matthieu637 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 02/10/2008, 11h38

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