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 :

Socket lire tant que des données sont disponibles


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut Socket lire tant que des données sont disponibles
    Bonjour à tous,
    je début avec les socket (et avec java). J'ai un serveur C++ qui attends un tableau de byte et qui va m'en renvoyer un en réponse.

    J'utilise pour l'écriture et la lecture un BufferedIn/OuputStream. Est ce la bonne solution ?

    Niveau envoi pas de problème je procède comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    this.reader = new BufferedInputStream(this.socket.getInputStream());
    this.writer = new BufferedOutputStream(this.socket.getOutputStream());
     
    byte[] packet = new byte[10];
    byte[] recieve = new byte[8192];
    packet[0] = 5;
    packet[1] = 2;
    //...
    this.writer.write(packet);
    Par contre au niveau de la réponse comment être certain de recevoir toutes les données ?
    Un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(this.reader.read(recieve) > 0 )
    est il suffisant ?

    Qu'est ce qui caractérise la fin du flux comme le dit la documentation ? la fin de la socket ou simplement l'absence de données ?

    Merci
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Salut,

    En effet il est bien d'utiliser des buffer pour écrire sur un socket. Ne pas le faire massacre souvent les performances. Il faut toutefois savoir que tu peux être amené à devoir appeler flush() lorsque tu veux être sûr que ce qui est en file d'attente est effectivement envoyé.

    Par ailleurs, pour savoir si tu as tout reçu de ce qu'on voulait t'envoyer ben... C'est un problème récurrent à tous les sockets peu importe le langage utilisé. C'est en fait pas le socket mais le PROTOCOLE utilisé qui détermine comment les 2 parties se mettent d'accord sur la fin d'un message.

    Certains consistent à utiliser simplement un séparateur, comme par exemple le "." ou le retour à la ligne dans certains protocoles RFC textes. Pour les protocoles destinés à l'envoi de données "binaires", on a tendance à envoyer en aval le nombre d'octets qui composent un message, afin que le récepteur sache à quel moment il doit considérer qu'il a tout reçu où s'il doit encore attendre une suite.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 192
    Par défaut
    niveau données, tout dépend de ce que tu veux envoyer, si tu n'envoies qu'un seul élément, tu n'auras pas trop de soucis, par contre si tu envoies plusieurs éléments à la suite sur le meme buffer tu devras mettre une procédure en place pour dire que tu as atteint la fin de ton premier lot de données.

    par exemple, si tu lis et envoie deux fichiers à la suite de 30Mo chacun, et que tu fais le write de l'autre coté, alors tu risques de te retrouver avec un seul fichier de 60Mo du coté client.
    Dans ce cas il faut trouver le point d'arrêt.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/03/2011, 03h46
  2. Comment lire et envoyer des données dans un automate
    Par orj30754 dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/09/2007, 13h01
  3. Savoir si des données sont écrites sur un flux
    Par zapatta dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 12h27
  4. lire et ecrire des donnée dans un .ini
    Par gsmdu62 dans le forum Delphi
    Réponses: 6
    Dernier message: 25/05/2006, 03h29
  5. Réponses: 3
    Dernier message: 02/03/2006, 21h54

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