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

Java Discussion :

Application Client/serveur : erreur


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 58
    Par défaut Application Client/serveur : erreur
    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
    import java.lang.*;
    import java.io.*;
    import java.net.*;
    import java.util.Date;
    public class DataServer {
    	public static void main (String args [])throws Exception
    	{
    ServerSocket srvr = new ServerSocket (1234);
    for (int i=0; i<4; i++){
    	Socket skt =srvr.accept();
    	PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
    	out.print(new Date().toString());
    	out.close();skt.close();
    }
    	}
     
    }
    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
    import java.lang.*;
    import java.io.*;
    import java.net.*;
    import java.util.Date;
     
    public class DateClient {
    	public static void main (String args [])throws Exception
    	{
     
    	Socket skt =new Socket ("localhost",1234);
    	BufferedReader in = new BufferedReader (new InputStreamReader(skt.getInputStream()));
    	while(!in.ready()){
    		System.out.println(in.readLine());
    	}
    	in.close();
     
    	}
     
    }
    j'ai essayé de tester cette application client/serveur pour l'accès au date et heure, mais un messages d'erreur est affiché dans le console:
    Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at DateClient.main(DateClient.java:10)
    Merci de m'expliquer ce type d'erreur, je suis débutante de ce type d'application et c'est juste j'ai essayé de tester un exemple de cours
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 174
    Par défaut
    Tu as l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in thread "main" java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at DateClient.main(DateClient.java:10) 
    Premièrement, tu vois que l'erreur se passe à la ligne 10 de ton main() (voir la ligne rouge). Cela correspond donc à la ligne: Socket skt =new Socket ("localhost",1234);

    Ensuite, tu regardes l'erreur en elle même (ligne bleue). Quand tu ne la connais pas tu peux faire une recherche sur Internet pour trouver à quoi cela correspond. Elle te dit que le client n'a pas réussi à se connecter au serveur. Cette erreur se produit souvent lorqu'il n'y a pas de service qui écoute sur le port sur lequel tu essayes de te connecter. Choses à vérifier quand tu as ce type d'erreur:
    - Ton serveur est bien démarré et écoute bien sur le port en question
    - Ton serveur est bien en attente de connexion
    - Tu te connectes bien sur le bon port
    - Le port que tu utilises est bien un port "disponible" (non réservé à des applis ou protocoles)

  3. #3
    Membre confirmé
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Doctorante
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2012
    Messages : 58
    Par défaut
    - Tu te connectes bien sur le bon port
    - Le port que tu utilises est bien un port "disponible" (non réservé à des applis ou protocoles)[/QUOTE]
    j'ai pas aucune idée est-ce que le port est bon ou non :/ j'ai voulu comprendre cet exemple pour comprendre par conséquence l'application
    client/serveur
    Alors D’après vous qu'est ce que je dois faire

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 174
    Par défaut
    C'est donc un code tout fait trouvé sur Internet?
    Déjà est-ce que tu lances bien ton serveur d'abord et sur quelle plateforme (Windows, Linux...)? Tu n'as pas d'erreur coté serveur?

    Edit: J'ai regardé de plus prêt ton code qui marche (mal) en lancant le serveur puis le client. Attention aux codes trouvés sur Internet et que l'on ne comprend pas. Il vaut mieux ne partir de rien et comprendre ce qu'on fait au fur et à mesure. Déjà voici quelques problèmes:
    - tes main throw Exception, il vaut mieux utiliser un try-catch où tu catch les exceptions qui peuvent se produire pour ne pas laisser la JVM catcher tes exceptions (tu pourrais par exemple afficher un message explicite en fonction de l'excepion qui a été levée)
    - Coté serveur, tu attends d'accepter 4 connexions et pour chacune tu veux envoyer la date courante. Après 4 connexions tu auras donc l'erreur que tu indiques car ton serveur n'écoutera plus et n'acceptera plus de connexion (il se termine après 4 connexions).
    - Coté client, tu te connectes et veux récupérer la date envoyé par le serveur mais pourquoi faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while(!in.ready()){
    	System.out.println(in.readLine());
    }
    En gros tu dis tant que mon BufferedReader n'est pas prêt j'affiche son contenu. Ca n'est pas logique et je l'afficherais plutot quand il est prêt au contraire. Voici la javadoc de ready():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Tells whether this stream is ready to be read. A buffered character stream is ready if the buffer is not empty, or if the underlying character stream is ready.
    Je te laisse résoudre ces soucis et après cela marchera mieux (j'ai testé de mon coté et cela marche) .

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le message est simple: personne n'est là pour répondre à ta requête sur le port 1234 serveur localhost.

    Après, il peut y avoir plusieurs raison:

    -> tu n'a pas démarré d'abord le serveur mentionné dans l'exemple
    -> le en question serveur a planté avant de te laisser te connecter
    -> le serveur n'écoute pas sur localhost mais sur une autre ip (là on commencer à toucher du plus compliqué)
    -> Ton firewall interdit ce genre de connection (peu probable)


    Mon instinct m'indique que ce serait plutôt le point 1: tu n'a pas d'abord démarré et laissé tourner l'application serveur.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 174
    Par défaut
    C'est ce que je lui ai déjà dit

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Je pense qu'il faut que tu appelles Socket.connect() avant de récupérer l'input stream.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 174
    Par défaut
    D'après la javadoc de Socket, le constructeur fait déjà la connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Socket(String host, int port) 
    Creates a stream socket and connects it to the specified port number on the named host.
    De plus, il n'y a pas de méthode connect() sans paramètre (seulement "connect(SocketAddress endpoint)" et "connect(SocketAddress endpoint, int timeout)"). L'erreur ici est à la ligne 10 lorsqu'il essaye de se connecter donc je ne penses pas que ce soit ca le problème.

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

Discussions similaires

  1. erreur d'execution application client/serveur sous serveur2008
    Par operateur321 dans le forum InterBase
    Réponses: 1
    Dernier message: 11/12/2010, 18h48
  2. [Débutant] Application client serveur
    Par dk dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 7
    Dernier message: 30/06/2004, 11h38
  3. Choix port pour application client-serveur
    Par Tiaps dans le forum Développement
    Réponses: 7
    Dernier message: 15/03/2004, 09h49
  4. Réponses: 2
    Dernier message: 01/10/2002, 12h25
  5. Langage le mieux adapté pour application client serveur ?
    Par guenus dans le forum Débats sur le développement - Le Best Of
    Réponses: 4
    Dernier message: 17/06/2002, 15h46

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