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 :

Echange des paquets TCP


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 39
    Par défaut Echange des paquets TCP
    bonjour
    je veux créer deux applications en java avec l'utilisation des sockets TCP.
    chaque application doit être capable d'envoyer et de recevoir des paquets TCP de l'autre application et de l'analyser selon son type qui sera défini dans l'entête.

    les paquets doivent avoir une format bien définies.(champ size,champ type,champ données..)

    je vous prie si quelqu'un a des documents ou bien des exemples a propos de ce sujet, merci de les communiquer.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    prière de commencer par faire un petit toure dans le et les tutoriels de ce site, merci.

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    prière de commencer par faire un petit toure dans le et les tutoriels de ce site, merci.
    ... et des messages déjà postés sur le sujet

  4. #4
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 39
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    prière de commencer par faire un petit toure dans le et les tutoriels de ce site, merci.
    j'ai déjà une idée sur les sockets, et j'ai fais un petit exemple de chat.

    mon problème c'est comment construire un format de paquet bien défini avec ces champs et le transmettre a l'autre cote???

  5. #5
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par passkok Voir le message
    j'ai déjà une idée sur les sockets, et j'ai fais un petit exemple de chat.
    mon problème c'est comment construire un format de paquet bien défini avec ces champs et le transmettre a l'autre cote???
    Si tu as déjà manipulé avec succès les sockets TCP, j'ai du mal à comprendre ce qui te bloque maintenant.

    Pour le format, tu as l'embarras du choix : la seule contrainte est que le client et le serveur utilisent le même format pour se comprendre.

    Par exemple:

    - 1 "message" = 1 paquet d'octets formé d'abord de 4 octets pour indiquer la longueur totale du paquet (en octets) puis les "données utiles"

    - les "données utiles" = un entier sur deux octets (16bits) pour le "type de message" puis le reste étant le contenu du message, appelons les des 'arguments'.

    - enfin, pour le "contenu du message", il dépendra à chaque fois du type de message, par exemple:

    * un message de type USER_SEND_SENTENCE_IN_CHAT sera composé d'un unique argument , un String du message envoyé par l'utilisateur

    * un message de type USER_REQUEST_ONLINE_USER_LIST ne sera composée d'aucun argument. Par contre ce message reçu par le serveur renverra un message de type ONLINE_USER_LIST avec un entier pour le nombre 'x' d'utilisateurs connectée, suivi de x String, une pour chaque pseudo.

    * etc...

    Dernière chose: pour chaque type de donnée 'basique', il te faut définir une façon de la convertir en une suite d'octets, transmissible sur la socket, par exemple:

    - un 'int' sera codé sur 4 octets (les 32 bits de l'entier directement sérialisés tels que représentés en mémoire)

    - un string sera codé par 4 octets pour sa longueur (nb. de caractères), puis 2 octets pour chaque caractère (valeur correspondant au code UTF-16 du caractère).

    - un float sera codé du 2 octets (32 bits) tel que stocké en mémoire.

    - etc...

  6. #6
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 39
    Par défaut
    merci bcp nouknouk
    c'est ça ce que je cherche a savoir.
    merci

  7. #7
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Comme dit précédemment, mon exemple n'en est qu'un parmi tant d'autre.

    Autre exemple: tu pourrais très bien décider qu'un "message" est une ligne de texte terminée par un retour chariot (\n), chaque "argument" étant alors séparé par des 'points-virgule' et le premier argument étant le type de message.
    Tu pourrais alors décider de sérialiser les valeurs flottantes en suite de caractères (genre "123.456") que tu re-parse à l'arrivée pour récupérer la valeur, etc...

    bref il y a presque autant de format imaginables que de besoins différents. Chacun ont leurs avantages et leurs inconvénients.
    Ainsi mon premier exemple est plutôt économe en bande passante tandis que le second est lui très facilement lisible par un être humain, pour le débogage.

    A noter également que l'exemple que je t'ai donné ci-dessus fait partie des classiques.
    Le framework C++ Qt utilise d'ailleurs quelque chose qui s'en rapproche pour sa classe "QDataStream" et qui est bien documenté (ici).
    Ca peut éventuellement te donner des idées

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/02/2012, 11h15
  2. Réponses: 8
    Dernier message: 30/09/2010, 21h25
  3. Taille des paquets en TCP
    Par coyotte507 dans le forum Développement
    Réponses: 2
    Dernier message: 26/08/2008, 12h57
  4. echange de paquets (tcp)
    Par cortex024 dans le forum Développement
    Réponses: 1
    Dernier message: 03/10/2005, 21h40
  5. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40

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