Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 86 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

connexion socket client serveur java

 
n°12955
karim48
Profil : Jeune recrue
Posté le 08-05-2005 à 15:21:44  profilanswer
 

:cry:  
bonjour
je programme sur une architecture client/serveur avec les sockets sur java,et j'ai pas pu faire une implémentation cohérente.
S.V.P envoyer moi une implémentation sur se sujet.

n°12961
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 09-05-2005 à 10:17:23  profilanswer
 

D'un coté tu as un thread "ServerSocket", de l'autre un thread "ClientSocket".
Ta socket server écoute tout le temps :

Code :
  1. import java.net.ServerSocket;
  2. import java.net.Socket;
  3. import java.net.NetworkInterface;
  4. import java.net.InetAddress;
  5. import java.io.ObjectOutputStream;
  6. import java.io.ObjectInputStream;
  7. import java.io.IOException;
  8. import java.io.NotSerializableException;
  9. public class ServerThread implements Runnable {
  10.     // Variables de classe.
  11.     private Felix app;
  12.     private int counter = 0;
  13.     private int connectionPort = 2184;
  14.     private boolean listening = true;
  15.     private ServerSocket serverSocket;
  16.     private Socket connection;
  17.     private ObjectOutputStream  output;
  18.     private ObjectInputStream  input;
  19.     /********************************/
  20.     /*        CONSTRUCTOR           */
  21.     /********************************/
  22.     public ServerThread(Felix parent) {
  23.         app = parent;
  24.         startServerThread();
  25.     }
  26.     public ServerThread(int port, Felix parent) {
  27.         if (port>0) {
  28.             connectionPort = port;
  29.         }
  30.         app = parent;
  31.         startServerThread();
  32.     }
  33.     /************************************/
  34.     /*    LANCEMENT DU THREAD SERVER    */
  35.     /************************************/
  36.     private void startServerThread() {
  37.         // On affiche quelques infos intéressantes sur le serveur
  38.         //---displayServerInfos();
  39.         try {
  40.             serverSocket = new ServerSocket(connectionPort);
  41.             System.out.println("> SERVER : Le serveur attend les connections...\n" );
  42.         } catch (IOException e) {
  43.             System.out.println("> SERVER : La socket serveur ne peut pas être lancée sur le port "+connectionPort+"." );
  44.             System.exit(-1);
  45.         }
  46.     }
  47.     /********************************/
  48.     /*             RUN              */
  49.     /********************************/
  50.     public void run() {
  51.         // Tant qu'on indique au thread de vivre.
  52.         // ----------------------------------------
  53.         while (listening) {
  54.             try {
  55.  // DO QUELQUE CHOSE !!!
  56.             }
  57.             catch (IOException e) {
  58.                 System.out.println("> SERVER : l'acceptation de la socket cliente a échouée!" );
  59.             }
  60.         }
  61.         // On a décidé de ne plus écouter les appels client; le thread va se terminer.
  62.         try {
  63.             serverSocket.close();
  64.         }
  65.         catch (IOException e) {
  66.             System.out.println("> SERVER : la tentative de fermeture du thread serveur a échouée!" );
  67.         }
  68.     }
  69.     /********************************/
  70.     /*       OTHERS METHODS         */
  71.     /********************************/
  72.     public void setListening(boolean state) {
  73.         listening = state;
  74.     }
  75.     public void displayServerInfos() {
  76.         try {
  77.             NetworkInterface nwi = NetworkInterface.getByInetAddress(InetAddress.getByName(app.getLocalHost()));
  78.             System.out.println("-------------------------------------------------" );
  79.             System.out.println("> Network interface : " + nwi.getDisplayName());
  80.             System.getProperties().list(System.out);
  81.             System.out.println("-------------------------------------------------\n" );
  82.         } catch(IOException e) {}
  83.     }
  84. }


 
 
Quant à la socket cliente :

Code :
  1. import java.io.ObjectInputStream;
  2. import java.io.IOException;
  3. import java.io.EOFException;
  4. import java.io.ObjectOutputStream;
  5. import java.net.InetAddress;
  6. import java.net.Socket;
  7. import java.net.UnknownHostException;
  8. public class ClientThread implements Runnable {
  9.     // Initialisation des variables de communication.
  10.     private InetAddress addr;
  11.     private Socket client;
  12.     private ObjectOutputStream  output;
  13.     private ObjectInputStream  input;
  14.     // Variables locales.
  15.     private int connectionPort = 2184;
  16.     private String text = null;
  17.     private boolean quitClient = false;
  18.     /********************************/
  19.     /*        CONSTRUCTORS          */
  20.     /********************************/
  21.     // Ce constructeur est voué à la destruction !!!
  22.     public ClientThread(){}
  23.     /********************************/
  24.     /*             RUN              */
  25.     /********************************/
  26.     public void run() {
  27.         System.out.println("> Client thread running" );
  28.         try {
  29.             // Création du "tuyau".
  30.             this.addr = InetAddress.getByName(destinataire.getHost());
  31.             client = new Socket(addr, connectionPort);
  32.             // Envoi du message.
  33.             sendMessage();
  34.         }
  35.         catch (UnknownHostException e) {
  36.             System.out.println("> CLIENT ("+destinataire.getName()+" ): Le client n'a pas trouvé de serveur à l'adresse "+destinataire.getHost());
  37.             System.out.println("> CLIENT ("+destinataire.getName()+" ): échec de connexion." );
  38.             // On met à jour l'état de connexion du contact.
  39.             updateContactConnectionStatus(FelixContact.CONTACT_STATUS_DISCONNECTED);
  40.         }
  41.         catch(IOException e) {
  42.             System.out.println("> CLIENT ("+destinataire.getName()+" ): Impossible d'établir la connexion avec "+destinataire.getName()+"." );
  43.             // On met à jour l'état de connexion du contact.
  44.             updateContactConnectionStatus(FelixContact.CONTACT_STATUS_DISCONNECTED);
  45.             // Si on interrogeait le contact pour tester son état de connexion.
  46.             if (messageType == FelixMessage.CHECK_CONTACT_CONNECTION) {
  47.                 System.out.println("> CLIENT ("+destinataire.getName()+" ): le contact ne semble pas être en ligne." );
  48.             }
  49.             // Si on tentait d'envoyer un message à un contact.
  50.             else if (messageType == FelixMessage.CONTACT_MESSAGE) {
  51.                 System.out.println("> CLIENT ("+destinataire.getName()+" ): le contact n'est pas joignable; impossible d'envoyer le message." );
  52.             }
  53.         }
  54.     }
  55.     // =========================================================
  56.     // Méthode de pilotage de la communication client/serveur.
  57.     // =========================================================
  58.     private void sendMessage() {
  59.         try {
  60.             // On crée les streams d'entrée / sortie.
  61.             output=new ObjectOutputStream(client.getOutputStream());
  62.             output.flush();
  63.             input=new ObjectInputStream(client.getInputStream());
  64.             // On pilote la communication et surtout son arrêt.
  65.             do{
  66.                 // Le client a la priorité d'envoi de message.
  67.                 sendData();
  68.                 try {
  69.                     // On lit le contenu de la communication.
  70.                     messageObject = (FelixMessage)input.readObject();
  71.                     // Si on cherchait à vérifier la connectivité avec le contact.
  72.                     if (messageType==FelixMessage.CHECK_CONTACT_CONNECTION && messageObject.isConnectionSuccessfull()) {
  73.                         System.out.println("> CLIENT ("+destinataire.getName()+" ): le contact distant a répondu 'connecté' =)" );
  74.                         quitClient = true;
  75.                         sendTerminate();
  76.                     }
  77.                     // La réponse nous indique que le contact nous a banni!
  78.                     else if (messageObject.isContactBanished()) {
  79.                         System.out.println("> CLIENT ("+destinataire.getName()+" ): le contact distant vous a banni de sa liste!" );
  80.                         quitClient = true;
  81.                         sendTerminate();
  82.                     }
  83.                     else if (messageObject.isConnectionTerminate()) {
  84.                         quitClient = true;
  85.                     }
  86.                 }
  87.                 catch(ClassNotFoundException e){
  88.                     System.out.println("> CLIENT ("+destinataire.getName()+" ): Le type de l'objet recu est inconnu!" );
  89.                     quitClient = true;
  90.                 }
  91.             } while(!quitClient);
  92.             // Le message a bien été envoyé.
  93.             input.close();
  94.             output.close();
  95.             client.close();
  96.         }
  97.         catch(EOFException eof){
  98.             System.out.println("> CLIENT ("+destinataire.getName()+" ): Le server a terminé la connection inopinément! Le client se ferme..." );
  99.             //app.chatTPane.addConvInfoEntry(convId, "Problème de connexion", "Le client a terminé la connection inopinément! Le message n'a peut-être pas été reçu." );
  100.         }
  101.         catch(IOException e) {
  102.             System.out.println("> CLIENT ("+destinataire.getName()+" ): communication client/serveur interrompue par une IOException." );
  103.             //app.chatTPane.addConvInfoEntry(convId, "Problème de connexion", "La communication avec le client s'est interrompue." );
  104.         }
  105.     }
  106.     /*************************************************/
  107.     /*   METHODES D'ENVOI D'UN MESSAGE A UN CONTACT  */
  108.     /*************************************************/
  109.     private void sendData() {
  110.         FelixMessage message;
  111.         if (text!=null && convId!=null && messageType==FelixMessage.CONTACT_MESSAGE) {
  112.             // On crée un message d'envoi de message.
  113.             message = new FelixMessage(app.getLocalUser(), text, convId);
  114.         }
  115.         else {
  116.             // On crée un message "de communication".
  117.             message = new FelixMessage(app.getLocalUser(), messageType);
  118.         }
  119.         try {
  120.             output.writeObject(message);
  121.             output.flush();
  122.         }
  123.         catch(IOException e) {
  124.             System.out.println("> CLIENT ("+destinataire.getName()+" ): Une erreur est apparue lors de l'écriture de l'objet a envoyé." );
  125.         }
  126.     }
  127.     private void sendTerminate() {
  128.         FelixMessage message = new FelixMessage(app.getLocalUser(), FelixMessage.CONNECTION_TERMINATE);
  129.         try {
  130.             output.writeObject(message);
  131.             output.flush();
  132.         }
  133.         catch(IOException e) {}
  134.     }
  135. }


 
 
Désolé, le code est dépouillé et donc il manque des trucs (volontairement et surtout pour la socket cliente), donc à toi de faire le travail d'analyse.
 
 
En gros, pour le principe, la socket server écoute tout le temps et ne s'arrête "jamais", la socket cliente est crée au besoin

Code :
  1. ClientThread xclientThread = new ClientThread();
  2. new Thread(xclientThread).start();


Et la socket cliente s'arrête d'elle-même lorsque le client et le server se sont mis d'accord.
 
Voilà :)


Message édité par ollone le 09-05-2005 à 10:27:01
n°12991
Syruis
Baaaaaaaaaaaaah!
Profil : Membre
Posté le 10-05-2005 à 23:31:28  profilanswer
 

rien en vaut les bons vieux sockets en C ... :)

n°12999
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 11-05-2005 à 11:56:03  profilanswer
 

Bah ouais, mais là c'est du Java :p
Et puis je sens comme une pointe d'envie, comme si Java prenait de plus en plus de poids :p ;)

n°14937
Aubinou
Profil : Jeune recrue
Posté le 14-10-2005 à 15:26:26  profilanswer
 

Slt  
oue kand meme. je pense aussi. allone pkoi ta depouillé la socket cliente ?? j'en ai besoin. please

n°14938
Aubinou
Profil : Jeune recrue
Posté le 14-10-2005 à 15:26:54  profilanswer
 

cest ollone desolé lol


Aller à :
Ajouter une réponse