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 :

[Débutant] Commencer avec le réseau


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de moomba
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Par défaut [Débutant] Commencer avec le réseau
    Je souhaiterai créer un petit programme,pas bien compliqué, sans interface graphique (car ça je sais faire ), et qui permettrait d'envoyer entre 2 ordinateurs d'un réseau local avec des IP fixes des données comme des strings (pour faire un genre de petit msn par exemple), ou des simple entier/réels.

    Le problème, c'est que débutant dans la partie des API réseau, j'ai eu beau regarder pas mal de tuto, je n'ai pas tout pigé (en plus, la plupart portent sur l'envoi de mail, ce qui ne m'interesse pas pour le moment).

    J'ai un peu honte de demander ça à des gens qui maitrisent le truc, mais quelqu'un pourrait t'il me guider un peu parmis la jungle des API, et m'indiquer les classes necessaires au simple envoi de données de PC à PC ? (genre pour un Msn en console ).

    Merci beaucoup d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Pour apprendre, le mieux serait sans doute d'utiliser directement les sockets de l'api java standard. Le tutoriel sur l'envoi de mail te permettra d'avoir les bases sur les sockets, ensuite rien de bien compliqué ... Ici un exemple où le serveur attend une connexion, puis une fois reçue attend de recevoir une String pour ensuite la renvoyer vers le client. Le client quand à lui envoit la ligne au server, puis imprime sur la sortir standard ce qu'il recoit (donc au final sa ligne qui a fait un aller-retour). Les flux In et Out sont remplacable par des InputStream(socket.getInputStream()) et de même pour le Out.

    Serveur :
    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
     
    import java.net.Socket;
    import java.net.ServerSocket;
     
    public class EchoServer {
     
        public static void main(String[] args) throws Exception {
     
            // initialisation
            int port = 4444;
            ServerSocket serverSocket = new ServerSocket(port);
            System.out.println("Serveur lancé sur le port : " + port);
            while (true) {
     
                // on attend une connexion entrante puis on associe une socket
                Socket clientSocket = serverSocket.accept();
                System.out.println("Nouveau client");
     
                //Ouverture des flux E/S
                In  in  = new In (clientSocket);
                Out out = new Out(clientSocket);
     
                // on attend une chaine (readlines est bloquante) puis la renvoit au client
                String s;
                while ((s = in.readLine()) != null) {
                    out.println(s);
                    //flush pour être sur de tout envoyer
                    out.flush();
                }
     
                // on ferme les flux, puis la socket client
                System.err.println("Fermeture connexion client");
                out.close();
                in.close();
                clientSocket.close();
            }
        }
    }
    Client :
    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
    import java.net.Socket;
     
    public class EchoClient {
     
        public static void main(String[] args) throws Exception {
            String host       = args[1];
            int port          = 4444;
     
            // connexion et ouverture des flux d'E/S
            Socket socket = new Socket(host, port);
            In    stdin  = new In();
            In     in     = new In(socket);
            Out    out    = new Out(socket);
            System.out.println("Connecté à " + host + " sur le port " + port);
     
            // on lit sur stdin, envoi au serveur et imprime ce qui en revient
            while (!stdin.hasNextLine()) {
     
                // lecture sur stdin
                String s = stdin.readLine();
     
                // envoi au serveur
                out.println(s);
     
                // affichage du message recu
                System.out.println(in.readLine());
            }
     
            // fermeture e/s puis socket
            System.err.println("Fermeture de la connexion à " + host);
            out.close();
            in.close();
            socket.close();
        }
    }

    Voilà essayes déjà de comprendre ceci, qui est relativement simple (c'est la base client/serveur) et ensuite hésites pas à poser des questions

  3. #3
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Voici ce que je te conseillerais pour apprendre:

    1. Commencer par gérer les connections TCP/IP via les classes Socket et ServerSocket

    2. Emettre directement des bytes[] pour tes strings et verifier que tout fonctionne

    3. Utiliser la serialisation/deserialisation des objets java pour emettre tes chaines (ObjectInputStream/ObjectOutputStream)

    4. Emission d'autres objets "serializable" comme par exemple "Color" qui donnerait la couleur du texte à utiliser

    5. Analyse de l'architecture de tes threads pour gérer tes écoutes bloquantes (Thread/ExecutorService)

    6. Passer a nio où tu peu réaliser des lectures/écritures asynchrones (Selector/SelectionKey/ByteBuffer)

    Voila, je t'ai simplement donné quelques mot clef, ce guide n'est pas forcement celui que tu dois suivre mais si tu vas jusqu'au bout tu maitriseras les échanges réseaux en java

    PS: je suis justement en train d'écrire une librairie d'échange d'objet java en utilisant nio / serialization & co, elle sortira bientot en LGPL.

  4. #4
    Membre confirmé Avatar de moomba
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Par défaut
    Merci beaucoup pour vos réponses

    J'ai essayé de compiler le petit client proposé, mais il veut pas
    J'ai pourtant bien remplacé les In et les Out, mais rien n'y fait.
    Voila le prog :
    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
    import java.net.Socket;
     
    public class EchoClient {
     
        public static void main(String[] args) throws Exception {
            String host = args[1];
            int port = 4444;
     
            // connexion et ouverture des flux d'E/S
            Socket socket = new Socket(host, port);
            InputStream stdin  = new socket.getInputStream();
            InputStream in     = new socket.getInputStream(socket);
            OutputStream out    = new socket.getOutputStream(socket);
            System.out.println("Connecté à " + host + " sur le port " + port);
     
            // on lit sur stdin, envoi au serveur et imprime ce qui en revient
            while (!stdin.hasNextLine()) {
     
                // lecture sur stdin
                String s = stdin.readLine();
     
                // envoi au serveur
                out.println(s);
     
                // affichage du message recu
                System.out.println(in.readLine());
            }
     
            // fermeture e/s puis socket
            System.err.println("Fermeture de la connexion à " + host);
            out.close();
            in.close();
            socket.close();
        }
    }
    Puis le compilateur me dit ceci :
    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
    C:\Documents and Settings\Moomba\Mes documents\Java\Network>javac EchoClient.jav
    a
    EchoClient.java:12: cannot find symbol
    symbol  : class getInputStream
    location: class java.net.Socket
            InputStream stdin  = new Socket.getInputStream();
                                           ^
    EchoClient.java:13: cannot find symbol
    symbol  : class getInputStream
    location: class java.net.Socket
            InputStream in     = new Socket.getInputStream(socket);
                                           ^
    EchoClient.java:14: cannot find symbol
    symbol  : class getOutputStream
    location: class java.net.Socket
            OutputStream out    = new Socket.getOutputStream(socket);
                                            ^
    EchoClient.java:18: cannot find symbol
    symbol  : method hasNextLine()
    location: class java.io.InputStream
            while (!stdin.hasNextLine()) {
                         ^
    EchoClient.java:21: cannot find symbol
    symbol  : method readLine()
    location: class java.io.InputStream
                String s = stdin.readLine();
                                ^
    EchoClient.java:24: cannot find symbol
    symbol  : method println(java.lang.String)
    location: class java.io.OutputStream
                out.println(s);
                   ^
    EchoClient.java:27: cannot find symbol
    symbol  : method readLine()
    location: class java.io.InputStream
                System.out.println(in.readLine());
                                     ^
    7 errors
    Mais pourtant, il n'y a pas de raisons qu'il ne trouve pas les bonnes méthodes, puis ce que j'importe le bon paquet.

    Bref, comprend pas. Désolé, je suis pas un pro du JAVA, je ne sait faire que des fenêtres, mettre des trucs dedans, faire des programmes de base quoi...

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 288
    Par défaut
    Citation Envoyé par moomba Voir le message
    Merci beaucoup pour vos réponses

    J'ai essayé de compiler le petit client proposé, mais il veut pas
    J'ai pourtant bien remplacé les In et les Out, mais rien n'y fait.
    Voila le prog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import java.net.Socket;
    Essaie plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import java.net.Socket.*;
    Pour importer tout le package avec ses "sous repertoires"
    Ca devrait te diminuer les erreurs !
    Merci de lire les règles du forum et surtout celle là Message clair et précis.
    Evitons les ctrl c ctrl v => Ne sortons pas les codes de leur contexte sinon ça ne marche pas.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 288
    Par défaut
    Rajoute aussi:
    Je pense que tu n'auras plus d'erreurs
    Merci de lire les règles du forum et surtout celle là Message clair et précis.
    Evitons les ctrl c ctrl v => Ne sortons pas les codes de leur contexte sinon ça ne marche pas.

  7. #7
    Membre confirmé Avatar de moomba
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Par défaut
    J'ai rajouté ceci :
    import java.io.*;
    import java.net.Socket.*;
    import java.net.*;
    mais toujours les mêmes erreurs...
    J'ai essayé ca, au cas ou, mais en principe, je suis à jours.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\Documents and Settings\Moomba\Mes documents\Java\Network>java -version
    java version "1.6.0_02"
    Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
    Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing)
     
    C:\Documents and Settings\Moomba\Mes documents\Java\Network>
    comprend pas ... Désolé...

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

Discussions similaires

  1. [WD17] [Débutant] Documentation avec exemples pour commencer
    Par devlopassion dans le forum WinDev
    Réponses: 8
    Dernier message: 05/08/2014, 15h30
  2. [Débutant] Mise en place d'un container LXC avec config réseau
    Par brunoperel dans le forum Virtualisation
    Réponses: 3
    Dernier message: 03/01/2014, 17h02
  3. [débutant] commencer avec Informix
    Par masterboy01 dans le forum Informix
    Réponses: 4
    Dernier message: 15/09/2009, 00h37
  4. [Débutant]Commencer avec les BDD
    Par Pill_S dans le forum Débuter
    Réponses: 6
    Dernier message: 29/06/2004, 14h02
  5. [Débutant] Lenteur avec TComPort
    Par PhDt76 dans le forum C++Builder
    Réponses: 22
    Dernier message: 27/09/2003, 21h43

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