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

avec Java Discussion :

Aide à comprendre Classe Java


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Par défaut Aide à comprendre Classe Java
    salut
    je suis débutant en langage Java et je suis entrain d'apprendre de jour en jour a programmer cependant sur mes recherches j'ai trouvé une Classe java sur Web que je n'arrive pas a comprendre , il ne s' agit pas de copier coller mais je veut juste comprendre cette Classe
    il s'agit de la Classe suivante Chat Server programmer pour creer un serveur d'une application :

    je veut juste comprendre comment elle marche ?
    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    import java.net.*;
     
       import java.text.SimpleDateFormat;
       import java.util.Date;
       import java.util.Locale;
       import java.util.regex.Matcher;
       import java.util.regex.Pattern;
     
       public class ChatServer {
     
           DatagramSocket ds;
     
           byte[] recbuf = new byte[1024];
     
           DatagramPacket rec = new DatagramPacket(recbuf, recbuf.length);
     
           int port;
     
           String newAddress = "";
           String addressList = "";
           String sendAddressList = "";
     
           public ChatServer(int port) {
               this.port = port;
           }
     
           public void init() throws Exception {//DatagramSocket
               if (port < 1024 || port > 65535) {
                   System.out.println("initialisation du port a la valeur 2008 ");
                   ds = new DatagramSocket(2008);
               } else {
                   ds = new DatagramSocket(port);
               }
           }
     
           public void start() throws Exception {
               println("demarrage du port");
               println("valeur du port" + port);
               init();
               receive();
           }
     
           public void receive() {
               for ( ; ; ) {
                   try {
                       ds.receive(rec);
     
                       String msg = new String(rec.getData(), rec.getOffset(), rec.getLength());
                       String natAddress = rec.getAddress().toString().substring(1);
                       int natPort = rec.getPort();
     
                       String Num = msg.substring(0,1);
                       msg = msg.substring(2);
                       String line;
     
                       switch(Integer.parseInt(Num)){//
                           case 1 : {
                               line = "Ò»¸öеÄÓû§µÇ¼: " + msg + "  NATµØÖ·: " + natAddress + " ¹ÜÀí¶Ë¿Ú: " + natPort;
                               sendAddressList = sendAddressList + natAddress + " " + natPort + " ";
                               newAddress = msg + ":" + natAddress + ":" + natPort;
                               println(line);
                               break;
                           }
     
                           case 2 : {
                               line = "ÒôƵ¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
                               println(line);
                               break;
                           }
     
                           case 3 : {
                               line = "ÒôƵRTCP¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
     
                               println(line);
                               break;
     
                           }
     
                           case 4 : {
                               line = "ÊÓÆµ¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
     
                               println(line);
                               break;
                           }
     
                           case 5 : {
                               line = "ÊÓÆµRTCP¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
                              println(line);
                              if (!sendAddressList.equals(""))
                                  doSend("1 " + newAddress, sendAddressList);
                              if(!addressList.equals("")){
                                  String address[] = newAddress.split(":");
                                  doSend("7 " + addressList,
                                         address[1] + " " + address[2]);
                              }
                              addressList = addressList + newAddress + " ";
                              break;
                          }
     
                          case 6 : {
                              line = "Ò»¸ö¿Í»§À뿪: " + msg + "  NATµØÖ·: " + natAddress + " ¹ÜÀí¶Ë¿Ú: " + natPort;
                              println(line);
                              delAddress(msg, natAddress, natPort);
                              if(!sendAddressList.equals(""))
                                  doSend("6 " + msg + ":" + natAddress, sendAddressList);
                              break;
                          }
     
                          case 7 : break;
                      }
     
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
          }
     
          public void doSend(String msgSend, String sendAddressList) throws Exception {
              String[] s = sendAddressList.split(" ");
              byte[] data = msgSend.getBytes();
              for(int i =0; i < s.length; i++){
                  DatagramPacket pack = new DatagramPacket(data, data.length, InetAddress.getByName(s[i]), Integer.parseInt(s[++i]));
                  ds.send(pack);
              }
          }
     
          public void delAddress(String msg, String natAddress, int ctrlPort){
     
              String regEx = msg + ":" + natAddress + ":" + ctrlPort + ":.{1,5}:.{1,5}:.{1,5}:.{1,5} ";
              Pattern p = Pattern.compile(regEx);
              Matcher m=p.matcher(addressList);
     
              String s = m.replaceAll("");
              addressList = s;
     
              regEx = natAddress + " " + ctrlPort + " ";
              p = Pattern.compile(regEx);
              m = p.matcher(sendAddressList);
              s = m.replaceAll("");
              sendAddressList = s;
          }
     
          public void println(String s) {
              Date nowTime = new Date();
              SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa", Locale.US);
              System.out.println(fmt.format(nowTime) + "----" + s);
          }
     
          public static void main(String[] args) throws Exception {
              new ChatServer(2008).start();
          }
      }

  2. #2
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Par défaut
    aide please personne ne sait se que ça veut exécuter

  3. #3
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Pour moi ça lance un server... je sais, pas très explicite
    Après les client se connectent au serveur. Donc il doit y avoir une classe ChatClient quelque part.

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.
    Citation Envoyé par netsoft Voir le message
    salut
    je suis débutant en langage Java et je suis entrain d'apprendre de jour en jour a programmer
    pour apprendre à programmer, il faut se documenter :
    Réseau en Java

    Architecture Client/Serveur en java avec les sockets

    bonne lecture!

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pour apprendre à programmer, il faut se documenter

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Par défaut
    merci pour vos réponse surtout pour les liens
    j'ai souhaite juste des explication d'un expert en java sur cette classe pour la comprendre , car pour l'instant je suis encore débutant et j'aimerais bien apprendre Java sous réseaux

    ce que j'ai appris garce au liens c'est une classe serveur qui utilise la transmission UDP datahrampacket et datagramsocket

    mais le reste comme la méthode receive () j'ai pas encore compris sont fonctionnement

    merci de m'éclairer sur ce pont

  7. #7
    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
    Tel que spécifié ici, receive() bloque jusqu'à ce qu'un paquet UDP soit reçu sur cette socket UDP.

    Ce paquet est enregistré dans le DatagramPacket donné en paramètre. Après l'appel à receive(), le DatagramPacket a le contenu du paquet, ainsi que l'adresse IP et le port de l'envoyeur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre expérimenté Avatar de akrom
    Homme Profil pro
    Automaticien
    Inscrit en
    Mai 2003
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 115
    Par défaut
    voila ce que j'ai compris mais précisions et corrections sont les bien venues
    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
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
     
     
    import java.net.*;
     
       import java.text.SimpleDateFormat;
       import java.util.Date;
       import java.util.Locale;
       import java.util.regex.Matcher;
       import java.util.regex.Pattern;
     
       public class ChatServer {
               //cré un socket d'émmission réception par paquet
           DatagramSocket ds;
            //tableau de bytes pour recevoir les données
           byte[] recbuf = new byte[1024];
     //objet 
           DatagramPacket rec = new DatagramPacket(recbuf, recbuf.length);
     
           int port;
     
           String newAddress = "";
           String addressList = "";
           String sendAddressList = "";
     // appel de la classe avec numero de port en parametre
           public ChatServer(int port) {
               this.port = port;
           }
     
           public void init() throws Exception {//DatagramSocket
               //controle si le port parametré est superieur à 1024(port 1 à 1024 utilisé pour les protocole courant ex: 80 hhttp)
               //et est inférieur à 655535 (valeur limite des ports)
               //sinon port initialisé à 2008
               if (port < 1024 || port > 65535) {
                   System.out.println("initialisation du port a la valeur 2008 ");
                   ds = new DatagramSocket(2008);
               } else {
                   ds = new DatagramSocket(port);
               }
           }
     //lance le serveur
           public void start() throws Exception {
               println("demarrage du port");
               println("valeur du port" + port);
               init();
               receive();
           }
     //reception des paquets
           public void receive() {
               for ( ; ; ) {
     
                   try {
                       //met les données reçu dans l'objet rec
                       ds.receive(rec);
                       //recupere les données du paquet
                       String msg = new String(rec.getData(), rec.getOffset(), rec.getLength());
                       String natAddress = rec.getAddress().toString().substring(1);
                     //  recupere le port sur lequel ont été envoyées les donnees
                       int natPort = rec.getPort();
     
                       String Num = msg.substring(0,1);
                       msg = msg.substring(2);
                       String line;
     //traite les données recues mais je ne sais pas a quoi correspond la valeur de line 
                       switch(Integer.parseInt(Num)){//
                           case 1 : {
                               line = "Ò»¸öеÄÓû§µÇ¼: " + msg + "  NATµØÖ·: " + natAddress + " ¹ÜÀí¶Ë¿Ú: " + natPort;
                               sendAddressList = sendAddressList + natAddress + " " + natPort + " ";
                               newAddress = msg + ":" + natAddress + ":" + natPort;
                               println(line);
                               break;
                           }
     
                           case 2 : {
                               line = "ÒôƵ¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
                               println(line);
                               break;
                           }
     
                           case 3 : {
                               line = "ÒôƵRTCP¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
     
                               println(line);
                               break;
     
                           }
     
                           case 4 : {
                               line = "ÊÓÆµ¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
     
                               println(line);
                               break;
                           }
     
                           case 5 : {
                               line = "ÊÓÆµRTCP¶Ë¿Ú: " + natPort;
                               newAddress = newAddress + ":" + natPort;
                              println(line);
                              if (!sendAddressList.equals(""))
                                  doSend("1 " + newAddress, sendAddressList);
                              if(!addressList.equals("")){
                                  String address[] = newAddress.split(":");
                                 //renvoi un message
                                  doSend("7 " + addressList,
                                         address[1] + " " + address[2]);
                              }
                              addressList = addressList + newAddress + " ";
                              break;
                          }
     //message recu de déconection 
                          case 6 : {
                              line = "Ò»¸ö¿Í»§À뿪: " + msg + "  NATµØÖ·: " + natAddress + " ¹ÜÀí¶Ë¿Ú: " + natPort;
                              println(line);
                              delAddress(msg, natAddress, natPort);
                              //renvoi un message
                              if(!sendAddressList.equals(""))
                                  doSend("6 " + msg + ":" + natAddress, sendAddressList);
                              break;
                          }
     
                          case 7 : break;
                      }
     
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
          }
     //envoi le message recu à tout les clients connectés
          public void doSend(String msgSend, String sendAddressList) throws Exception {
              String[] s = sendAddressList.split(" ");
              byte[] data = msgSend.getBytes();
              for(int i =0; i < s.length; i++){
                  DatagramPacket pack = new DatagramPacket(data, data.length, InetAddress.getByName(s[i]), Integer.parseInt(s[++i]));
                  ds.send(pack);
              }
          }
     //suppresion d'une adresse apres déconnection
          public void delAddress(String msg, String natAddress, int ctrlPort){
     
              String regEx = msg + ":" + natAddress + ":" + ctrlPort + ":.{1,5}:.{1,5}:.{1,5}:.{1,5} ";
              Pattern p = Pattern.compile(regEx);
              Matcher m=p.matcher(addressList);
     
              String s = m.replaceAll("");
              addressList = s;
     
              regEx = natAddress + " " + ctrlPort + " ";
              p = Pattern.compile(regEx);
              m = p.matcher(sendAddressList);
              s = m.replaceAll("");
              sendAddressList = s;
          }
     //ecrit dans la console le message recu
          public void println(String s) {
              Date nowTime = new Date();
              SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss aa", Locale.US);
              System.out.println(fmt.format(nowTime) + "----" + s);
          }
     
          public static void main(String[] args) throws Exception {
              new ChatServer(2008).start();
          }
      }

Discussions similaires

  1. L'aide en ligne sur les classes Java
    Par abj8077 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 09/03/2011, 19h48
  2. aide class java
    Par alex170978 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/01/2009, 22h20
  3. convertisseur de classe C++ vers classe Java ?
    Par novice12 dans le forum C++
    Réponses: 3
    Dernier message: 16/12/2004, 21h37
  4. classes java [débutant]
    Par glurps dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/06/2003, 15h57
  5. Inserer des classes java existantes
    Par 2000 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/03/2003, 12h35

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