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

Réseau C Discussion :

[socket]Ecrire int dans un socket


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut [socket]Ecrire int dans un socket
    Bonjour,
    comment faire pour écrire un char ou un int ou un double dans une socket à l'aide dela fonction send
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int send(int sockfd, const void *msg, int len, int flags);
    je ne comprends pas trop le type const void *. Cela veut dire qu'on ne précise pas le type n'est ce pas ?

    est-ce que cela est correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    numbytes = send(my_sock, 10, sizeof(int), 0);
    merci.

  2. #2
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut
    je m'auto corrige.

    ça serait plutot ça , non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int tmp = 10;
    numbytes = send(*sock, &tmp, sizeof(int), 0);	// sending message

  3. #3
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Tu devrais tester le retour de la fonction send() pour savoir si il correspond bien à la taille des données envoyées.

    ça serait plutot ça , non
    Code :
    int tmp = 10;
    numbytes = send(*sock, &tmp, sizeof(int), 0); // sending message
    Je suppose que tu as défini sock ainsi:
    et dans ce cas, ca serait plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int tmp = 10;
    numbytes = send(sock, &tmp, sizeof(tmp), 0); // sending message

  4. #4
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut
    oué c'est ça.
    Je teste le retour, je ne l'ai juste pas mis ici. merci

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Tex-Twil
    je m'auto corrige.

    ça serait plutot ça , non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int tmp = 10;
    numbytes = send(*sock, &tmp, sizeof(int), 0);	// sending message
    Non. il faut au préalable déterminer si tu envoies un 16-bit ou un 32-bit, puis transformer la valeur au format réseau :

    Disons 16-bit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       int tmp = 10;
       unsigned char tmp_n[2] = 0;
     
       tmp_n[0] = (tmp >> (8 * 1)) & 0xFF; /* MSB first */
       tmp_n[1] = (tmp >> (8 * 0)) & 0xFF;
     
       numbytes = send(*sock, tmp_n, sizeof tmp_n, 0);	// sending message
    sock est un pointeur ?

  6. #6
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut
    oui sock est un pointeur d'entier qui pointe vers le socket. En fait, je suis dans un fonction et je le passe en paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // main 
    ...
    sock = socket(AF_INET, SOCK_STREAM, 0)
    ...
    // ensuite
    sendEcho(int *sock, char *message)
    par contre je ne comprends pas trop la conversion. Pourquoi faut il le faire ? ... je vais me renseigner chez mon amis Google.

  7. #7
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Car c'est une convention et cela permet une certaine portabilité. Si on envoie un int sur 8 octets et que la machine en face comprend des int sur 4 octets… qui fait quoi, comment ? Alors que si tu décodes toi même ton message, pas de problème !

    On traduit tout en UCHAR avant passage, et disons qu'on envoie rarement juste 1 int ou un float etc.... souvent il y a plein d'informations qui sont stockés dans un socket avant envoie pour "optimiser" le tout ! Car l'envoie à un coup !

  8. #8
    Membre éclairé Avatar de Tex-Twil
    Inscrit en
    Avril 2004
    Messages
    447
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 447
    Par défaut
    Citation Envoyé par Ti-R
    Car c'est une convention et cela permet une certaine portabilité.!
    ok je vois. Maintenant, si j'oublie la portabilité et si je sais que la taille de mon int est de 4 octets des deux coté est ce que le code est "bon" ?

Discussions similaires

  1. Ecrire le caractère 0 dans une socket
    Par Blocks dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2011, 18h40
  2. Réponses: 9
    Dernier message: 20/01/2006, 12h04
  3. Réponses: 20
    Dernier message: 23/09/2005, 13h50
  4. write() dans une socket.. unix
    Par slack dans le forum Réseau
    Réponses: 5
    Dernier message: 18/12/2002, 20h42

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