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

  1. #1
    Membre du Club
    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
    Points : 47
    Points
    47
    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 habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    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)
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  3. #3
    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
    Points : 653
    Points
    653
    Par défaut
    Je pense qu'il faut que tu appelles Socket.connect() avant de récupérer l'input stream.

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    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.
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  5. #5
    Membre du Club
    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
    Points : 47
    Points
    47
    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

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    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) .
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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.

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    Par défaut
    C'est ce que je lui ai déjà dit
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  9. #9
    Membre du Club
    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
    Points : 47
    Points
    47
    Par défaut
    le firewall est déja désactivé, j'ai essayer de changer le throw exception par try et catch: un message d'erreur "java.net.BindException: Address already in use: JVM_Bind" c'est a dire que le port est déja occupé dans ce cas qu'est ce que je dois faire

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 173
    Points : 187
    Points
    187
    Par défaut
    Change le numéro de port s'il est déjà utilisé (par exemple par 8042. Il me semble que c'est un port que tu peux utiliser).
    Diplomes: DUT informatique et Master 2 MIAGE.
    Développeur Java/J2EE (principalement), .NET (niveau scolaire mais je compte m'améliorer ) et Web (HTML, PHP...).

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Tu dois aussi apprendre a utiliser la commande "netstat" pour diagnostiquer plus facilement...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Et vu que, en général, quand on développe, quand le port est déjà occupé c'est parce qu'on a lancé deux fois l'application et que la première ne s'est pas arrêté, commencer par vérifier cela.
    Sinon, vérifier aussi les applications qui peuvent occuper par défaut ce port 1234


    http://www.speedguide.net/port.php?port=1234

    et il y a une tartine de trojans possible

+ 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, 19h48
  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, 12h38
  3. Choix port pour application client-serveur
    Par Tiaps dans le forum Développement
    Réponses: 7
    Dernier message: 15/03/2004, 10h49
  4. Réponses: 2
    Dernier message: 01/10/2002, 13h25
  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, 16h46

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