obtenir une ip 'classic' à partir de accept !? - C++ - Programmation
Marsh Posté le 26-05-2003 à 19:49:54
Je pensai que "intet_ntoa" serai peut etre la solution à mon prob mais il reçoit en param une struct in_addr or moi j'ai une sockaddr
Marsh Posté le 27-05-2003 à 10:13:50
bon je suis pas très claire...
un ptit exemple ne fera pas de mal.
Code :
|
je pensai fair psad->sa_data mais apparement c'est pas trop ça?
Marsh Posté le 27-05-2003 à 10:16:59
Me semble qu'il y a une fonction qui fait la trduction sock_adr -> chaîne et inverssement, mais je me souvient plus de son nom sur le coup, je vais y réfléchir un peu
Marsh Posté le 27-05-2003 à 10:58:00
Peak a écrit : bon je suis pas très claire...
|
A t a fonction tu lui passerai pas par hazard une sockaddr_in castée en sockaddr? Par ce que si c le cas tu doit pouvoir chopper la in_addr dedans.
Marsh Posté le 27-05-2003 à 12:26:28
struct sockaddr *paddress; ( y a deux d a address )
inet_ntoa(paddress->sin_addr);
Marsh Posté le 27-05-2003 à 19:38:13
xWillow a écrit : struct sockaddr *paddress; ( y a deux d a address ) |
sin_addr fait pas parti de sockaddr y'a juste sa_data et sa_family
en effet gethostbyaddr() à l'air nikel ....
Marsh Posté le 28-05-2003 à 13:04:55
oui tu as raison,
tu peux aussi avoir
struct sockaddr_in *paddress;
accept( Sock, (struct sockaddr *)paddress, &alen );
et la tu pourra faire comme j'ai dit
Marsh Posté le 25-06-2003 à 13:51:14
Je ressort un vieux topique...mais j'étai en blocus et ai plus pu me permettre de passer du temps sur mes codes!
J'en reviens donc au prob que je me pausai y'a un mois.
En fait un petit mot d'explication sur les cast serai pas de refus :
Kand je fait
struct sockaddr_in *paddress;
accept( Sock, (struct sockaddr *)paddress, &alen );
on est bien d'accord ke la structure bit à bit de padress est exactement la même ke si je faisait :
struct sockaddr *paddress;
accept( Sock, paddress, &alen );
Ils auront juste un traitement différent dû à leur type et au routines de traitement ki y sont associé!?
Si je n'ai pas encore fait de faute je vois pas comment un simple cast pourrai arranger mon prob a moins d'une relation direct entre sockaddr et sockaddr_in.
A la limite si vous me donniez un exemple ki marche je pourrai faire des hypothèses, mais aucunes des technique ne me semble convaincante du moins aucun ne ma donné le résultat voulu !!!!
p.e:
Code :
|
Marsh Posté le 25-06-2003 à 15:05:59
tu rates : ton parametre 'sad' n'est pas alloué.
une solution :
Code :
|
Marsh Posté le 26-06-2003 à 16:11:31
merci, ça marche
en fait le prob est dans
s_adrs=inet_ntoa(sad->sin_addr);
c'est marrant par ec que d'après le man la fonction revoit un char* et lorsque je fait cette assignation gcc m'affiche : "affectation transforme un pointeur en entier sans transtypage"
je voit pas trop où est l'entier mais bon du moment ke ça marche
(la fonction OutputDebugString vient de kelle lib?)
Marsh Posté le 26-06-2003 à 17:09:24
Reply
Marsh Posté le 26-05-2003 à 18:42:29
Hey,
J'ai un tit prob,
j'utilise la fonction systeme accept pour etablir une connection par socket stream entre un client et un serveur.
Je voudrait connaitre l'ip du client :
int accept(int sock, struct sockaddr *adresse, socklent_t *longueur);
je m'attendai à ce qu'elle soit dans 'adress->sa_data' mais apparement j'ai mal compris cette partie du man :
L'argument adresse est un paramètre résultat qui est renseigné avec l'adresse de l'entité se connectant, telle qu'elle est connue par la couche de communication. Le format exact du paramètre adresse est fonction du domaine dans lequel la communication s'établit. Le paramètre resultat longueur est renseigné avec la longueur (en octets) de l'adresse retournée. Ce paramètre doit initialement contenir la longueur du paramètre adresse.
Donc, comment avoir cette adress ip à partir de 'adress' si cela est possible??