Socket en Java

Discutez d'informatique ici !
Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

Socket en Java

par Rockleader » 22 Nov 2015, 16:03

Salutation, me voilà sur la partie 2 de ce mini projet.

J'aimerais si possible avoir quelques précisions sur le fonctionnement des socket en java sachant que je suis coté serveur.

J'ai ce code de base qui m'étais donné, j'ai pu voir en bidouillant et en faisant des tests à peu près comment il fonctionnait

Code: Tout sélectionner
ServerSocket socketEcoute;
    Socket socketService;
    InputStream entreeSocket;
    OutputStream sortieSocket;
    try {
      // création du socket d’écoute (port numéro 7000)
      socketEcoute = new ServerSocket(7000);
      while (true) {
        // attente d’une demande de connexion
        socketService = socketEcoute.accept();
        System.out.println("Nouvelle connexion : " + socketService);
        // récupération des flux d’entrée/sortie de la socket de service
        entreeSocket = socketService.getInputStream();
        sortieSocket = socketService.getOutputStream();
        try {
          int b = 0;
          while (b != -1) {
            b = entreeSocket.read();
            sortieSocket.write(b);
          } // while
          System.out.println("Fin de connexion");
        } // try
        catch (IOException ex)
        {
          // fin de connexion
          System.out.println("Fin de connexion : "+ex);
          ex.printStackTrace();
        }
        socketService.close();
      } // while (true)
    } // try
    catch (Exception ex)
    {
      // erreur de connexion
      System.err.println("Une erreur est survenue : "+ex);
      ex.printStackTrace();
    }
  } // main
} // class


Ici, on lit donc sur entrée socket les infos. Un petit test avec mon navigateur m'a bien confirmé que entree socket recevait les requêtes du client. (J'ai casté le b en char pour m'en convaincre pleinement).

Donc, avec ça, je peux lire sur une socket, il n'y a pas de problème, ça veut dire que, modulo quelques bidouillages je suis capable de traiter la requête client.

Par contre, je n'ai pas trouvé comment "répondre" au client, et donc écrire sur la socket.

Je croyais au début que c'était le rôle de sortie socket, mais apparemment ce n'est pas le cas puisque sortie socket écrit sur l'écran.


Du coup, ce qui serait bien que j'arrive à faire ce serait un truc de ce style



Code: Tout sélectionner
public void responseGet(String filePath, [COLOR=Red]Socket socketPourEcrire[/COLOR]) throws FileNotFoundException{
      Scanner scanner=new Scanner(new File(filePath));
      
      // On boucle sur chaque champ detecté
      while (scanner.hasNextLine()) {
          String line = scanner.nextLine();
          System.out.println(line);
        [COLOR=Red]  /*On enverra ici le fichier demandé par le get du client
                          en se servant de socketPourEcrire ????[/COLOR]



                      *****************/
         
      }
      
      scanner.close();
   }
   
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !



lecarpla
Membre Relatif
Messages: 180
Enregistré le: 27 Nov 2011, 16:27

par lecarpla » 22 Nov 2015, 23:06

Hello !

Il faut que tu écrives (avec un *Writer) sur la sortie de ton socket (socketPourEcrire.getOutputStream()).

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 19:42

par Rockleader » 23 Nov 2015, 02:07

Bonsoir et merci pour ta réponse.

lecarpla a écrit:Hello !

Il faut que tu écrives (avec un *Writer) sur la sortie de ton socket (socketPourEcrire.getOutputStream()).



C'est ce que j'avais cru comprendre aussi, mais alors

pourquoi ce morceau écrit sur l'écran et non sur une socket ?
Code: Tout sélectionner
 entreeSocket = socketService.getInputStream();
 sortieSocket = socketService.getOutputStream();

int b = 0;
          while (b != -1) {
            b = entreeSocket.read();
            sortieSocket.write(b); [COLOR=Red]==> ecrit à l'écran[/COLOR]
          }
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 6 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite