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

EDT/SwingWorker Java Discussion :

client serveur par socket


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut client serveur par socket
    bonjour a tous,
    j'ai développé un serveur et un client pour un jeu, mais j'ai un probleme, je veux limiter le nombre de connexions de client et quand les clients sont tous prets, empecher un nouveau client de se connecter.

    code du client pour se connecter:
    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
     
    public int connexion ( )
       {
           try 
           {
               //socket = new Socket ( "5.161.238.1" , port ) ; 
               socket = new Socket ( "localhost" , port ) ;
               socket.setSoTimeout ( 5000 ) ;
               ecriture_objet = new ObjectOutputStream ( socket.getOutputStream ( ) ) ; 
               lecture_objet = new ObjectInputStream ( socket.getInputStream ( ) ) ;
               ecriture_texte = new PrintWriter ( new BufferedWriter ( new OutputStreamWriter ( socket.getOutputStream ( ) ) ) , true ) ;
               lecture_texte = new BufferedReader ( new InputStreamReader ( socket.getInputStream ( ) ) ) ;
           }
           catch ( Exception e ) 
                     {
                         return 0 ; 
                     }
           return 1 ;
       }
    code du 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
     
    public void lancement ( )
       {
            try
            {
                try
                {
                    s = new ServerSocket ( port ) ;
                    fenetre.get_lancement ( ).setText ( "Serveur ON" ) ;
                }
                catch ( Exception e )
                {
                    fenetre.get_lancement ( ).setText ( "Serveur OFF" ) ;    
                }
                while ( fin == 0 )
                {
                    if(nbr_connexions <= 9)
                    {
                        if ( bloc == 0 )
                        {
                            soc = s.accept ( ) ;
                            if ( soc != null )
                            {
                                Connexion c = new Connexion ( this , soc , nbr_connexions ) ;
                                c.start ( ) ;                 
                                nbr_connexions ++ ;
                            }
                        }
                    }
                }
            }
            catch ( Exception e ) 
            {
                System.out.println ( "erreur Serveur [lancement] : " + e ) ; 
            }
            try 
            {
                soc.close ( ) ; 
                s.close ( ) ;
            }
            catch ( Exception e ) 
            {
                System.out.println ( "erreur Serveur [lancement] : " + e ) ; 
            }
       }
    donc comme je veux on ne peut pas faire plus de 10 connexions, et quand j'ai 2 clients qui on envoyer un certain message au serveur, son attribut bloc passe a 1,mais un nouveau client peut se connecter ce qui n'est pas normal.
    voila si vous pouviez m'aider.
    merci a tous

  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
    sur le code du serveur, tu ne modifies jamais la variable "bloc". Donc le serveur est toujours en attente d'une nouvelle connexion.
    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
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Euh ... moi je ne dirais pas exactement cela.

    La méthode accept() est une méthode bloquante. Tant que personne ne demande la permission de se connecter, ton serveur attend. Or ta vérification de bloc est AVANT accept(). Donc, quand les deux utilisateurs décident de bloquer le serveur, il y aura encore au moins 1 personne capable de se connecter (le temps de refaire un tour). Et là, le test de bloc est effectué.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    j'ai mis seulement le code de connexion du serveur, j'ai bien une méthode qui me permet de modifier bloc.
    D'autre part j'ai une classe Lancement_Serveur extends Thread qui dans sa méthode 'run' effectue la méthode lancement du serveur, justement parceque accepte était bloquante.

    Si j'ai bien compris , je dois faire mon test de bloc après accept?

    merci de vos réponses

    [Edit] en métant mes tests après la méthode accept, tout marche parfaitement, merci beaucoup

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

Discussions similaires

  1. [Python 2.X] Connexion client serveur par module socket
    Par Toug19 dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 30/01/2015, 09h04
  2. Client serveur en sockets
    Par SASARITA dans le forum Réseau
    Réponses: 2
    Dernier message: 30/04/2014, 22h27
  3. [HF11] Client serveur avec Socket
    Par bakouly dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 30/06/2013, 21h51
  4. Connexion client/serveur par socket
    Par k3nsou dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 23/03/2009, 17h34
  5. lien client/serveur via socket
    Par erox44 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 08/12/2008, 08h54

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