Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1558 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Un bind( ) dans un prog client en mode TCP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un bind( ) dans un prog client en mode TCP

n°2055745
razuki
Posté le 10-02-2011 à 11:56:39  profilanswer
 

Bonjour,
j'ai repris un code qui contient un bind( ) coté client en mode TCP. Cela me surprends car pour moi un client crée une socket puis utilise celle-ci pour se connecter au serveur. A quoi sert ce bind( ) dans le client ?
Merci d'avance pour votre aide.

mood
Publicité
Posté le 10-02-2011 à 11:56:39  profilanswer
 

n°2055769
ccp6128
Syntax error
Posté le 10-02-2011 à 12:48:25  profilanswer
 

Bonjour,
 
A binder la socket en question sur un port. Pour être plus spécifique, ca doit être pour spécifier que ta socket en émission part d'un port spécifique et pas d'un port aléatoire.
 
 
Sans autre indications sur le code ou l'usage de ce programme, je ne pense pas qu'on puisse te donner plus d'explications.


Message édité par ccp6128 le 10-02-2011 à 12:59:05
n°2055807
razuki
Posté le 10-02-2011 à 14:07:32  profilanswer
 

D'accord. Voici grosso modo la fonction xconnect qui fait appel éventuellement à bind( ), puis à connect( ) de l'OS. xconnect( ) permet à l' appli client de se connecter au serveur.
 

Code :
  1. int xconnect(uint32_t daddr, unsigned short dport, uint32_t *saddr, unsigned short *sport, int proto, int stp0)
  2. si->src.sin_family = AF_INET;
  3.     si->src.sin_addr.s_addr = *saddr;
  4.     si->src.sin_port = htons(localPort);
  5.     si->dst.sin_family = AF_INET;
  6.     si->dst.sin_addr.s_addr = daddr;
  7.     si->dst.sin_port = htons(dport);
  8.     if ((*saddr || *sport) && (stp != sipdgram) ) {
  9.      if (::bind(sock, (sockaddr *)&si->src, sizeof(si->src))) {
  10.       err = sockerrno();
  11.       log(ERROR, "bind error: %s", sockstrerror(err));
  12.       goto osfail;
  13.      }
  14.     }
  15. if (isstream(si->stype) && connect(sock, (sockaddr *)&si->dst, sizeof(si->dst))) {
  16. // traitement erreur
  17. }


     
 
ce que je n'ai pas compris : mais quand est ce qu'on spécifie comme suit ( cad sans bind )  ? :
 

Code :
  1. serv_addr.sin_family = AF_INET ;
  2.   serv_addr.sin_addr.s_addr = inet_addr (IP) ;
  3.   serv_addr.sin_port = htons (PORT) ;
  4.   memset (&serv_addr.sin_zero, 0, sizeof(serv_addr.sin_zero));
  5.   s_cli = socket (PF_INET, SOCK_STREAM, 0) ;
  6.   err = connect (s_cli, (struct sockaddr *)&serv_addr, sizeof serv_addr) ;


 
là aussi on spécifie l'adresse source pour l'émission : IP et le port source : PORT (qui est défini en macro plus haut ..)


Message édité par razuki le 10-02-2011 à 14:09:24
n°2055809
ccp6128
Syntax error
Posté le 10-02-2011 à 14:12:55  profilanswer
 

Nein.
 
Dans le premier cas, tu crées ta socket en lui passant une IP et un port source spécifiques, puis tu fais ton connect sur ton serveur distant.
 
Dans le second cas, tu ne spécifies pas d'IP et de port source, juste l'ip et le port distants => Ton OS lance la connexion via un port source aléatoire.

n°2055823
razuki
Posté le 10-02-2011 à 14:36:09  profilanswer
 

aie ca doit être la fatigue ... lol Merci pour ton aide.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Un bind( ) dans un prog client en mode TCP

 

Sujets relatifs
Communication sécurisée client/serveurverifier que le flux est bien chiffrer entre client et serveur
comment inclure/compiler OpenSSL dans mon progAjout de port imprimante TCP/IP Lexmark en vbs
Comment programmer un client FTP sous Androidapplication de “chat” (à la fois le serveur et le client) en utilisa
[Access] Accéder aux champs d'un enregistrement en mode macroClient messagerie gérant l'envoi de mails en HTML
Mysqld en mode log binaire sous linuxForcer le port source en TCP/IP client
Plus de sujets relatifs à : Un bind( ) dans un prog client en mode TCP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR