[prog C++]Client/Serveur

stillfelil Messages postés 135 Statut Membre -  
stillfelil Messages postés 135 Statut Membre -
Salut j'ai un problem avec la recuperation de l'ip du client
j'ai codé un programme Serveur en C++ Builder avec l'api win32
j'ai commencé par l'initialisation

WSADATA Wsa;
if(WSAStartup(MAKEWORD(1,1),&Wsa)!=0)
return 0;

int sk = socket(AF_INET,SOCk_STREAm,0);

//initialisation de SOCKADDR_IN
SOCKADDR_IN addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.S_un.S_addr = INADDR_ANY;

bind(sk,(SOCKADDR*)&addr,sizeof(addr));

listen(sk,1);

SOCKADDR_IN *addr_rem;
int remote = accepte(sk,(SOCKADDR*)&addr_rem,NULL);

//ET LA YA UN PROBLEM en recuperant l'ip du client

char* ip = inet_addr(addr_rem->sin_addr);
//et la j'obtien la chaine "0.0.0.0"

alors si quelq'un connait le probleme ou une autre maniere ce serait sympa
;-)
A voir également:

2 réponses

crabs Messages postés 909 Statut Membre 507
 
Salut,
Pour moi, il y a un problème sur cette ligne
int remote = accepte(sk,(SOCKADDR*)&addr_rem,NULL);

Le dernier argument dans l'appel sert à passer la taille la structure pointée par
le second argument (paramètre en entrée/sortie). Mais je connais pas l'API
windows. Perso j'écrirai ça :
int len = sizeof( SOCKADDR ) ;
int remote = accept( sk, (SOCKADDR*)&addr_rem, &len ) ;

A+, crabs
0
stillfelil Messages postés 135 Statut Membre 38
 
oui je sais jai pas voulu recupéré la taille de la stucture

et une petite rectification au lieu de la fonction inet_addr il faut mettre inet_ntoa mais dans mon code je lé mi, en tous cas ca ne change rien au probleme j'arrive pas a récupéré mon addr_rem ca valeur est null
et comme tu disé c'est au niveau du accepte que ca se passe
0