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 :

Connexion entre un serveur et un client?(socket)


Sujet :

Entrée/Sortie Java

  1. #1
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut Connexion entre un serveur et un client?(socket)
    Bonjour,

    voila j'ai créer une connexion entre un serveur et un client et la je veux que le serveur envois un message au client, je dois modifier mon cleint pour qu'il soit lui aussi serveur ou bien il y a une technique pour que mon client puisse lire???

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Pour établir une communication avec le serveur, tu dois ouvrir une socket qui, après un bind, correspondra à un port ouvert. La communication étant établie avec le serveur, tu as là un lien entre le client et le serveur qui persiste jusqu'à ce que le client ou le serveur ferme la connexion.

    Le client peut donc envoyer un message par la socket, mais il peut également attendre une réponse du serveur sur cette même socket (par un receive par exemple).
    Pas besoin vraiment de construire ton client sous la forme d'un serveur.
    Pour rappel, un serveur est juste un programme qui attend une requête sur un port donné. Dès qu'il reçoit quelque chose, il effectue le traitement et envoie le résultat au client.
    Il y a donc communication dans les deux sens, selon ce modèle.

  3. #3
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonsoir,

    Concretement, pour que le client puisse lire les infos envoyé par le serveur, il faut juste appeler la méthode getInputStream() sur la socket.

    si tu veux un exemple regarde sur "penser en java"
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    ben c'est ce que j'ai fait regardez 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
    Socket socket = new Socket (this.nom, this.port);
     
                // if (socket.isConnected())
                    // System.out.println("Demande de connexion");
     
     
                out = new PrintWriter(socket.getOutputStream());
     
                String g = new String("fin");
                if (g.equals("fin"))
                {
                   out.println("fin");
     
                }else
                out.println("Je suis connecté au serveur");
     
                   out.flush();
     
                   in = new BufferedReader(new InputStreamReader (socket.getInputStream()));
                   message_serveur = in.readLine();
                   System.out.println ("Le serveur a répondu: " + message_serveur);
     
                    socket.close();
    mais la quand j'affiche le message du serveur il m'affiche null pourquoi aucune idée alors que voici ce que fait mon serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     in = new BufferedReader (new InputStreamReader(socket.getInputStream()));
                message_distant = in.readLine();
                if (!message_distant.equals("fin"))
                {
                    System.out.println("Le serveur a reçu: "+message_distant);
                    out= new PrintWriter(socket.getOutputStream());
                    out.println("Vous avez dit: " + ""+message_distant);
     
                }else
                    WhileTest=false;
    Merci pour votre aide...

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    la réponse est simple !
    Je résume le déroulement du code :
    - le serveur se lance et se met en attente de connexion
    - le client se lance et demande une connexion
    - le serveur accepte la connexion et attend sur la socket de communication
    - le client envoie "fin" et attend la réponse
    - le serveur vois que message_distant n'est pas différent de "fin"
    - le serveur place WhileTest a false
    - le serveur arrête la socket de communication
    - le client (lorsque la socket de communication est coupé) ne recois que du null et l'affiche
    - le client s'arrête

    il est donc normal que le client affiche null, car ton code ne correspond pas à celui de penser en java.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre habitué Avatar de zemzoum89
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 373
    Points : 131
    Points
    131
    Par défaut
    mais meme si je mets g="n'importe quoi" c'est la meme chose le serveur répond null vous voyez??

    ps: c'était en essayant que j'avais oublié de changer g désolé....

  7. #7
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    avec le bout de code qui a été posté, si l'on met sur le client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String g = new String("une autre chaine");
    le client affiche bien "Le serveur a répondu: Vous avez dit: Je suis connecté au serveur "

    En revanche cela va provoqué une NullPointerException coté serveur car le client va fermé la socket et le serveur avec les lignes suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    message_distant = in.readLine();
    if (!message_distant.equals("fin"))
    le readLine va retourner null et le .equals sur un null explose.

    Si ce n'est pas le cas met le code complet des classes client et serveur car c'est qu'il y a autre chose
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    message_distant = in.readLine();
    if (!message_distant.equals("fin"))
    le readLine va retourner null et le .equals sur un null explose.
    petite astuce de codeur pour éviter ça : "fin".equals(message_distant)
    en mettant la constante en premier, on évite les problèmes de NullPointer.
    a+;

Discussions similaires

  1. [AJAX] ajax connexion entre deux serveurs
    Par dede6435 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/12/2007, 21h20
  2. [AJAX] Transmettre un fichier XML entre deux serveurs via un client
    Par quentin_ler dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/08/2007, 10h03
  3. probleme de connexion entre 2 serveures SQL 2005
    Par SILO dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/04/2007, 15h46
  4. [Domaine] Problème lenteur entre 1 serveur et 1 client
    Par Bomba dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 25/04/2007, 18h15
  5. Deux connexions TCP entre un serveur et un client ?
    Par innosang dans le forum Développement
    Réponses: 4
    Dernier message: 18/12/2006, 00h33

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