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 :

Flux de données par socket


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Flux de données par socket
    Voila, je programme un chat, je voudrais envoyer mes flux de données en bytes pour une question de légerté.

    J'ai pensai créer des tableaux de bytes mais le problème c'est qu'a la réception coté serveur, mon inputstream ne détecte pas la fin du tableau, d'autant plus que les messages n'ont pas tous la même longueur.

    Quelqu'un a t-il une méthode ? Merci

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il y a 150 méthodes d'échanges de fichiers... peut être pourrais-tu les regarder ?... Avec ce que tu nous dis, il est difficile de te conseiller, car tu sembles croire que le problème est simple ? En tous les cas, la réponse directe à ta question est de te dire Eh bien ! Envoie simplement la longueur de ton tableau au serveur !

    ... ou d'utiliser FTP ? ou HTTP ? ou un paquetage de chat ?

  3. #3
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Quand il s'agit de communiquer par socket, j'aime bien aller voir du côté de l'API commons-net de Jakarta.

    Le code est robuste, et il y a déjà pas mal de choses déjà développées ce qui évite d'avoir à réinventer la roue.

  4. #4
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    Salut,
    j'ai écrit quelque chose de trés légé et rapide qui permet d'écrire des entiers dans un tableau de bytes, en indiquant le nombre de bits utilisés.
    En gros si tu veux envoyer les entiers "3" et "2", tu enverras en binaire:
    "11"+"10"="1110".
    Ca permet de pratiquement rien gaspiller en bande passante. Tu peux aussi écrire des chaines de caracteres simples en 32bits (ou plus si tu veux).
    Je t'envois ça par mail si tu veux.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 12
    Points
    12
    Par défaut probléme de réception d'un tableau de byte avec Socket
    pour envoyer un tableau de byte vers le serveur, j'ai envoyé la taille du tableau et puis le tableau mais a la reception et lorsque je vais recevoir mon tableau ca reste bloqué au niveau de la lecteur on dirait qu'il attend quelque chose.
    en fait il ya deux methode pour la lecture de ObjectInputstream il ya read(byte[]) et readFully(byte[]) qu'elle est la différence entre les deux?
    Merci de m'aider et de me donner si possible une methode qui fonctionne bien.

  6. #6
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    je pense pas qu'il y ait une différence, c'est juste que read(byte[] buf,int off,int len) permet de choisir où tu veux placer les bytes lus dans buf.
    Si ça reste bloqué c'est juste que la taille attendue est supèrieure à la taille réellement envoyé. Tu as bien pris en compte ça aussi :
    j'ai envoyé la taille du tableau
    dans la taille ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par orelero
    je pense pas qu'il y ait une différence, c'est juste que read(byte[] buf,int off,int len) permet de choisir où tu veux placer les bytes lus dans buf.
    Si ça reste bloqué c'est juste que la taille attendue est supèrieure à la taille réellement envoyé. Tu as bien pris en compte ça aussi :
    dans la taille ?
    Concernant la taille du tableau je l'envoie à part avec writeInt(taille_tableau) et le récepteur le recoit avec readInt() et puis j'envoie le tableau avec (1) write(byte[]) ou avec (2) write(byte[],offset,taille_tableau) et je le recoit par (3) read(byte[]) ou par (4) read(byte[],offset,taille_tableau) et ca marche pas, sachant que j'ai utilisé les différentes combinaisons (1) avec (3) et (1) avec (4)
    aussi (2) avec (3) et (2) avec (4).
    y'a pas une idée SVP???
    Merci pour votre réponse orelero

  8. #8
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    tu as juste à envoyer tout d'un coup. Disons que la taille de ton tableau ne dépasse pas 2^8=256 en taille, tu mets dans le 1er byte la taille de ton tableau. Comme ca il suffit d'ecouter le message à venir avec un readByte et de recuperer ainsi la taille de ton tableau et ensuite un readfully.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    la taille du mon tableau est trés grande (l'ordre de 350000) c'est la conversion d'une image en tableau.
    donc l'idée de mettre la taille dans la 1ere case ne marche pas.
    y'a pas d'autre astuce?

  10. #10
    Membre actif Avatar de orelero
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 389
    Points : 274
    Points
    274
    Par défaut
    si tu ne peux pas dans la 1ere, suffit de le faire sur les 3 premiers

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    le probleme c'est pas comment on va envoyer la taille du tableau mais comment on va envoyer le tableau lui meme et le recevoir sans blocage dans l'un des deux coté (emetteur ou recepteur)
    Si quelqu'un a un bout de code pour envoyer et recevoir un tableau de byte en utilisant Socket TCP en java Merci bien de me l'envoyer
    Merci pour votre aide
    a+

  12. #12
    Membre averti Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Points : 323
    Points
    323
    Par défaut
    Essaie de mettre un bout de code de ton côté. C'est peut-être une erreur très con.

Discussions similaires

  1. (Client/Serveur)Lire flux données avec sockets
    Par tr.hedi dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 24/02/2013, 23h05
  2. réception de données par un socket
    Par devvanjier dans le forum Réseau
    Réponses: 3
    Dernier message: 04/06/2012, 13h59
  3. Serveur multithreads, envoie données par socket
    Par Orci76 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 15/07/2010, 18h44
  4. Envoi donnes par socket
    Par astrotouf dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/04/2007, 21h06
  5. Rediriger un flux de données sous linux
    Par Nicaisse dans le forum POSIX
    Réponses: 7
    Dernier message: 01/07/2003, 17h04

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