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 :

Client et serveur TCP


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 96
    Points
    96
    Par défaut Client et serveur TCP
    Salut,
    Je débute la programmation de sockets en JAVA. J'ai 3 classes:

    ServeurTCP.java
    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
    //package package_TCP;
     
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.InputStream;
    import java.io.OutputStream;
     
    public class ServeurTCP {
     
            static int hostport = 8532;
     
    	static public void initServeur(int port)
    	{
    	try
    	{
    	// Création de la socket : écoute sur l'une des @IP de la machine
    	// 10 connexions max sont autorisées
    	InetAddress loc=InetAddress.getLocalHost();
    	ServerSocket listen_socket=new ServerSocket(port,10,loc);
    	// Boucle infinie d'interception des requêtes de connexion
    	for(;;)
    	{
    	Socket socket=listen_socket.accept();
    	Thread thread= new TraitementRequete(socket);
    	thread.start();
    	}
    	}
    	catch(Exception e)
    	{
    	System.err.println("Erreur: " + e);
    	}
    	}
     
    	public static void main (String[] args) {
    		// TODO Auto-generated method stub
     
               initServeur(hostport);
     
     
    	}
     
    }
    TraitementRequete.java
    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
    //package package_TCP;
     
    //import java.io.InputStream;
    //import java.io.OutputStream;
    import java.io.*;
    import java.net.Socket;
     
    public class TraitementRequete extends Thread {
     
    	Socket socket;
    	public TraitementRequete(Socket socket) { this.socket = socket; }
    	public void run() {
    	try
    	{
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintStream out = new PrintStream(socket.getOutputStream());
             String message = in.readLine();
             out.println(message);
             socket.close();
     
            /* InputStream flux_entree=socket.getInputStream();
            OutputStream flux_sortie = socket.getOutputStream(); */
     
            // réception : flux_entree.read(byte[])
    	// envoi : flux_sortie.write(byte[])
    	}
     
    	catch(Exception e)
    	{
    	System.err.println("Erreur: " + e);
    	}
    	}
    }
    ClientTCP.java
    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
    //package package_TCP;
     
    import java.net.InetAddress;
    import java.net.Socket;
    /* import java.io.InputStream;
    import java.io.OutputStream; */
    import java.io.*;
    //import org.omg.CORBA.portable.InputStream;
    //import org.omg.CORBA.portable.OutputStream;
     
    public class ClientTCP {
     
            static int hostport = 8532;
            static String hostname;
            static public void connexionServeur(String hostname,int hostport)
    	{
    	try
    	{
    	// Récupération de l'adresse IP du serveur
    	InetAddress svrAddr=InetAddress.getByName(hostname);
    	// Création d'une socket TCP vers le port du serveur
    	Socket socket=new Socket(svrAddr,hostport);
    	// Récupération des flux d'entrée/sortie de la socket
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            PrintStream out = new PrintStream(socket.getOutputStream());
            //out.println(argv[1]);
            System.out.println(in.readLine());
     
            /* OutputStream flux_sortie = socket.getOutputStream();
            InputStream flux_entree = socket.getInputStream(); */
     
    	// envoi : flux_sortie.write(byte[])
    	// réception : flux_entree.read(byte[])
    	}
    	catch(Exception e)
    	{
    	System.err.println("Erreur: " + e);
    	}
    	}
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
                    //hostname = args[0];
                    hostname = "localhost";
                    connexionServeur(hostname,hostport);
    	}
     
    }
    mais lorsque je lance l'exécution, j'obtiens cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur: java.net.ConnectException Connection refused Connect
    je ne comprends pourquoi?

    Merci beaucoup d'avance pour votre aide.

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Le client doit essayer de se connecter sur le port du serveur qu'il a ouvert (ici c'est 10)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 96
    Points
    96
    Par défaut client et serveur tcp
    Citation Envoyé par millie Voir le message
    Le client doit essayer de se connecter sur le port du serveur qu'il a ouvert (ici c'est 10)
    j'ai lu la javadoc du constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
    je crois que 10 représente le nombre maximum de connexions simultanées sur le serveur.

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Autant pour moi, mais tu devrais éviter d'avoir des noms de variable dans une méthode qui ont le même nom qu'un attribut.

    As tu pensé à lancer le serveur avant de lancer le client ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 96
    Points
    96
    Par défaut Serveur et client TCP
    Citation Envoyé par millie Voir le message
    Autant pour moi, mais tu devrais éviter d'avoir des noms de variable dans une méthode qui ont le même nom qu'un attribut.

    As tu pensé à lancer le serveur avant de lancer le client ?
    oui, j'ai lancé le serveur avant de lancer le client.

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Commence par régler un problème à la fois : lance le serveur seulement, puis fait un telnet sur le port du serveur. Si ça marche, alors tu peux te tourner vers le client.
    Pour le telnet :
    Puis tape quelque chose en terminant par Enter.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 173
    Points : 96
    Points
    96
    Par défaut client et serveur tcp
    Citation Envoyé par dinobogan Voir le message
    Commence par régler un problème à la fois : lance le serveur seulement, puis fait un telnet sur le port du serveur. Si ça marche, alors tu peux te tourner vers le client.
    Pour le telnet :
    Puis tape quelque chose en terminant par Enter.
    J'ai cette erreur et je ne comprends pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connexion à localhost... Impossible d'ouvrir une connexion à l'hôte sur le port 8532: Echec de la connexion

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Fait voir juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ServerSocket ... = new ServerSocket(port, 10);

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 170
    Points
    170
    Par défaut
    +1 pour milli

    en fait ici ton serveur n'écoute que sur l'adresse localhost et c'est pourquoi.

    Donc aucun client ne pourra se connecter à ton serveur à partir d'une autre machine.

    Si c'est le but recherché, pour que ton client veuille bien se connecter à ton serveur il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Récupération de l'adresse IP du serveur
    if (hostname.equalsIgnoreCase ("localhost")){
    svrAddr=InetAddress.getLocalHost();
    }else{
    svrAddr=InetAddress.getByName(hostname);
    }
    Sinon avec la solution proposée par millie ton serveur écoute sur toutes les adresses de la machine et donc il est joignable de n'importe où.

Discussions similaires

  1. Créer un client pour serveur TCP/IP
    Par Pierre de Nice dans le forum Débuter
    Réponses: 7
    Dernier message: 26/01/2009, 21h56
  2. discussion entre socket client et serveur (TCP)
    Par xokami35x dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 08/06/2008, 19h21
  3. Application client et serveur TCP/IP
    Par engi dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/10/2006, 20h11
  4. Client Tcp/ Serveur TCP
    Par Phébus dans le forum Web & réseau
    Réponses: 2
    Dernier message: 21/07/2005, 16h35
  5. client/serveur tcp/ip en c sous unix
    Par oclone dans le forum Développement
    Réponses: 8
    Dernier message: 19/04/2005, 18h55

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