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

Développement Discussion :

[SOCKET] Fonction bind()


Sujet :

Développement

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Par défaut [SOCKET] Fonction bind()
    Bonjour,

    je n'arrive pas a comprendre l'utilite de la fonction bind().

    Le role de la primitive bind(...) est d’associer a une socket une adresse a usage du monde exterieur.
    quelle est la difference avec l'adresse que l'on precise avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SOCKADDR_IN sin;
     sin.sin_addr.s_addr = inet_addr("127.0.0.1");
     sin.sin_port = htons(21);
    J'ai realise un programme qui envoi/recoi des donnees sans cette fonction.
    Quelle utilitee cette fonction peu elle apportee a un programme.

    Merci

  2. #2
    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 Re: [SOCKET] Fonction bind()
    Citation Envoyé par chacal
    je n'arrive pas a comprendre l'utilite de la fonction bind().
    Le role de la primitive bind(...) est d’associer a une socket une adresse a usage du monde exterieur.
    quelle est la difference avec l'adresse que l'on precise avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     SOCKADDR_IN sin;
     sin.sin_addr.s_addr = inet_addr("127.0.0.1");
     sin.sin_port = htons(21);
    J'ai realise un programme qui envoi/recoi des donnees sans cette fonction.
    Parce que tu utilises un mode non connecté et que tu précises les informations d'adressage à chaque envoi ou reception avec sendto() ou recvfrom().
    Quelle utilitee cette fonction peu elle apportee a un programme.
    bind() est la fonction qui créée le lien entre la socket et le monde extérieur. Une fois que bind() a été appelée, la socket garde l'info. On peut ensuite utiliser des fonctions plus simples comme send() et recv(). Evidemment, ça ne fonctionne qu'en mode connecté (genre TCP/IP).

  3. #3
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut Re: [SOCKET] Fonction bind()
    Citation Envoyé par Emmanuel Delahaye
    bind() est la fonction qui créée le lien entre la socket et le monde extérieur.
    Non tu confonds avec connect(). La fonction bind() permet de lier une socket à une adresse ou un port donnés.

    Exemple 1 : Quand on se connecte à un serveur, en général on ne précise pas le port local qui est choisi automatiquement par la couche réseau de l'OS. Parfois on peut souhaiter fixer le port local, on doit alors bind()er préalablement sur le port voulu.

    Exemple 2 : Tu as un PC avec plusieurs IP (par exemple 2 cartes réseau), si tu crées une socket en listen() sans faire de bind() on pourra se connecter dessus en passant aussi bien par l'une ou l'autre carte réseau. Si tu souhaites limiter la connexion à une IP seulement, il faut utiliser la fonction bind(). C'est utile par exemple sur une passerelle pour autoriser les connexions depuis le réseau local mais pas depuis internet.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Par défaut
    en mode non connecter (UDP) la fonction bind() peu donc etre utilisee pour cette meme utilisation ?

  5. #5
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    A priori oui.

  6. #6
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut Re: [SOCKET] Fonction bind()
    je n'arrive pas a Evidemment, ça ne fonctionne qu'en mode connecté (genre TCP/IP).
    TCP est un protocole avec connexion. IP fonctionne en mode déconnecté, udp aussi.

  7. #7
    Membre Expert
    Avatar de Aramis
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juin 2002
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 493
    Par défaut Re: [SOCKET] Fonction bind()
    Citation Envoyé par SuperCed
    TCP est un protocole avec connexion. IP fonctionne en mode déconnecté, udp aussi.
    N'importe quoi! IP est un protocol de niveau 3 dont le but est d'achemine le paquet avec "Best Effort". L'une des raisons pour les quelles la couche de transport (couche 4), dont TCP et UDP font parti, c'est justement pour corriger le fait que parfois l'arrive des paquets doit etre guarantie.

    Citation Envoyé par RFC 791
    The internet protocol is specifically limited in scope to provide the
    functions necessary to deliver a package of bits (an internet
    datagram) from a source to a destination over an interconnected system
    of networks. There are no mechanisms to augment end-to-end data
    reliability, flow control, sequencing, or other services commonly
    found in host-to-host protocols.
    C'est pourquoi, il est preferable de ne pas atteindre les meme conclusions pour des protocols qui ont ete fondamentalment penses differements

    Ar@mi$

  8. #8
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Je ne comprends pas ou est la contradiction...
    J'aurais du dire IP et udp fonctionnent en mode "sans connexion" peut -être.

    TCP est un protocole avec connexion.

    IP est un protocol de niveau 3 dont le but est d'achemine le paquet avec "Best Effort". L'une des raisons pour les quelles la couche de transport (couche 4), dont TCP et UDP font parti, c'est justement pour corriger le fait que parfois l'arrive des paquets doit etre guarantie.
    Je suis d'accord également. Les modes "avec connexion/sans connexion" sont indépendants de la correction et reprise sur erreur.

    Par exemple, la couche lisaison(niveau 2) du protocole Ethernet fait de la correction d'erreur alors que les transferts se font sans connexion.
    Et l'exemple contraire serait le réseau téléphonique qui fonctionne avec connexion (commuté) mais sans contrôle d'erreur car il n'est pas très important de garantir l'intégrité de la voix.

    Peux-tu m'expliquer la contradiction? Je ne suis pas un spécialiste du réseau, mais je ne demande qu'à apprendre.

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 75
    Par défaut
    aramis parle du model osi qui est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    couche 7) application
    couche 6) presentation
    couche 5) session
    couche 4) transport
    couche 3) reseau
    couche 2) liaison de donnée
    couche 1) physique
    (ce n'est qu'un model)

    ou celui qui envoie part de la couche 7 jusqu'a la couche 1 et celui qui reçoit part de la couche 1 et va jusque qu'a la couche 7 sachant que la couche 1 représente les bits (ex 10011101) et la chouche 7 représente les donnés que l'application comprend (TOTO achet 1, qui pourrait dire pour l application toto achet le produit numero 1)...
    un peut dur a comprendre...

    soit ...

    TCP et UDP sont du niveau de la couche 4 et IP est du niveau de la couche 3
    TCP est avec correction d'erreur et orienté connection ("assure" que les données sont bien arrivé grace à un ACK)
    UDP est un protocole sans correction d'erreur et n'est pas orienté connection ( envoie d'une donnée sans savoir si l'hote distant les a bien recu)
    UDP est plus rapide mais moin fiable.

    la couche 4 donne un adresse de transport ( numero de port, FTP 21, SNMP 161, pop3 110,...)
    couche 3 donne l'adresse réseau (IP) 192.168.0.1,10.59.5.6,...
    couche 2 donne l'adresse physique (MAC) 000C:6F5A:7A0C

    donc superCed ici on ne peut pas faire la comparaison entre des couches differentes.
    TCP et UDP c'est une chose. IP c'est une autre chose.
    je sais pas si c'est claire....

    et le bind() c'est pour associer une adresse IP a un port (si je me trompe pas) donc sur internet un machine avec l'addresse IP 217.59.53.254 et le port 21 veut dire que la machine avec cette adresse IP a un serveur FTP se qui est unique (si on parle pas de NAT, PAT, ...) et peut avoir un autre serveur comme SSH, SFTP,mail,Web,...

  10. #10
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Je connais le modèle OSI, et tout ces trucs là.

    Je n'ai pas comparé des protocoles de niveaux différents, j'ai simplement dit que IP n'était pas un protocole orienté connexion. Je ne vois pas en quoi cela pose un problème.

    Connexion en français s'écrit avec un "x".

    Je suis d'accord avec tout ce que tu dis aussi.
    Je ne vois pas ou est le problème, et pourquoi on ne peut pas comparer des protocoles de niveaux différents.

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 75
    Par défaut
    si on oublie tout se qui est protocole et qu'on parle juste des adresses, on ne peut pas comprarer des ports avec des adresses IP.
    pour le protocole c'est le meme chose, les protocle de la couche 3 s'occupe du routage des paquets
    et les protocole de la couche 4 s'occupe d'ajouter de la correction d'erreur ou pas, sans s'occuper du routage

  12. #12
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Citation Envoyé par ced2004
    si on oublie tout se qui est protocole et qu'on parle juste des adresses, on ne peut pas comprarer des ports avec des adresses IP.
    pour le protocole c'est le meme chose, les protocle de la couche 3 s'occupe du routage des paquets
    et les protocole de la couche 4 s'occupe d'ajouter de la correction d'erreur ou pas, sans s'occuper du routage
    Oui, mais on peut quand même les comparer, même s'ils n'ont pas la même fonction.

    De toutes façons, ce n'était pas l'intérêt principal de mon message. Je soulignais juste le fait que IP n'était pas orienté connexion, c'est tout.
    As-tu déjà utilisé des sockets IP directement? Si tu regardes la doc, tu verras qu'il n'y a pas de connect ou de listen. Ca fonctionne comme de l'UDP à ce niveau.
    Mais bien sur, quand tu utilises un socket UDP, il y a la couche IP en dessous.

    Donc bref, j'ai toujours été d'accord avec tout ce qui a été dit dans ce topic.

  13. #13
    Membre Expert
    Avatar de Aramis
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Juin 2002
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 493
    Par défaut
    Re,

    Citation Envoyé par SuperCed
    Oui, mais on peut quand même les comparer, même s'ils n'ont pas la même fonction.
    Peux tu comparer un poirreau et une tomate? Non car le premier est un legume et le second est un fruit pourtant les deux sont mangeables : : Avec des arguments pareils on ne s'en sortira jamais.

    Cependant, je tiens a souligne que le model OSI a ete specialement cree a cet effet. Chaque couche fournit des services ou bien se charge de certaines choses pour les couches adjacantes. Ces couches sont interchangeables. On pourrai tres bien faire du TCP sur IPX. Par consequent, la modularite ne permet pas les comparaisons.

    Certains ouvrages sur les reseaux disent que le model OSI a rendu difficile l'apprentissage des principes de communication entre machine mais a rendu plus facile (et c'etait le but) l'inter-connexion de machines heterogenes. Peu etre cette histoire de comparaison "impossible" tombe dans la categorie de la difficulte d'apprentissage

    Ar@mi$

  14. #14
    Membre éclairé
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Par défaut
    Citation Envoyé par Aramis
    Re,

    Citation Envoyé par SuperCed
    Oui, mais on peut quand même les comparer, même s'ils n'ont pas la même fonction.
    Peux tu comparer un poirreau et une tomate? Non car le premier est un legume et le second est un fruit pourtant les deux sont mangeables : : Avec des arguments pareils on ne s'en sortira jamais.
    Bien sur qu'on peut comparer un poireau et une tomate!!! on peut comparer leur couleur, leur forme, leur goût, etc. Mais comme tu le dis, avec de telles discutions, on s'en sortira jamais.

    De toutes façons, comme je l'ai déjà dit plus haut, ce n'est absolument pas la partie importante de mes posts, et en plus, je n'ai jamais comparé des protocoles de niveaux différents.

    Et je suis d'accord aussi avec tout ce que tu as dit.
    Bref, je ne vois toujours pas d'où vient le désacord...

Discussions similaires

  1. [SOCKET] Intérêt de la fonction bind côté client
    Par barthelv dans le forum Développement
    Réponses: 5
    Dernier message: 11/09/2007, 06h46
  2. socket : fonction bind
    Par hammag dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 21/11/2006, 20h09
  3. Socket : fonction recv.
    Par thieum74 dans le forum C++
    Réponses: 7
    Dernier message: 06/04/2006, 10h18
  4. Réponses: 2
    Dernier message: 31/05/2005, 09h50
  5. Gestion de sockets: fonction Accept
    Par keupon dans le forum MFC
    Réponses: 12
    Dernier message: 22/01/2004, 18h48

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