récuperer l'adresse IP d'un client avec recvfrom

récuperer l'adresse IP d'un client avec recvfrom - C - Programmation

Marsh Posté le 29-11-2010 à 14:52:06    

Bonjour tout le monde,
 
Je suis entrain de développer un serveur en C. Il récupère un messageenvoyé par un client en UDP, puis le traite et retourne le résultat généré.
 
Afin de pouvoir répondre au client, j'ai besoin de récupérer son adresse IP et son port d'écoute. Pour cela j'ai utilisé la fonction recvfrom, qui est sensé récupérer l'expéditeur et le contenu. Pourtant ma variable contenant l'adresse IP est toujours vide. Pourriez vous me dire se qui bloque?
 

Code :
  1. memset(&expediteur, 0, sizeof(sockaddr));
  2. recvfrom(socketFD, buffer[MAX_BUFFER], MAX_MSG_SIZE, MSG_DONTWAIT, &expediteur, &tailleFrame);


 
Je précise que je reçois bien le message dans le buffer, la taille de la trame également, mais que expéditeur reste à 0. :fou:  
 
Un peu, voir beaucoup d'aide serait la bienvenu.  :pt1cable:


---------------
En informatique, il n'y a pa de solution, que des problèmes :)
Reply

Marsh Posté le 29-11-2010 à 14:52:06   

Reply

Marsh Posté le 29-11-2010 à 16:00:44    

Que contient le dernier paramètre (en l'occurence &tailleFrame) ?
Il faut l'initialiser avec la taille de expediteur.
Donc essayer :

Code :
  1. static int expediteur_lg;
  2. ...
  3. expediteur_lg = sizeof(expediteur);
  4. recvfrom(socketFD, buffer[MAX_BUFFER], MAX_MSG_SIZE, MSG_DONTWAIT, &expediteur, &expediteur_lg);

Reply

Marsh Posté le 29-11-2010 à 16:20:15    

Merci, maintenant l'adresse de l'expéditeur n'est pas vide, mais comment je la convertie pour récupérer l'adresse sous la forme 127.0.0.1 par exemple?

 


Message édité par iviath le 29-11-2010 à 16:20:25

---------------
En informatique, il n'y a pa de solution, que des problèmes :)
Reply

Marsh Posté le 29-11-2010 à 16:43:47    

Utiliser inet_ntop() ou InetNtop() ou WSAAddressToString() ou inet_ntoa(). Voir la doc.


Message édité par olivthill le 29-11-2010 à 16:44:04
Reply

Marsh Posté le 29-11-2010 à 17:00:50    

j'ai testé avec inet_ntoa et ntohs mais ca me retourne 127.0.0.1 alors que j'ai paramétré ca en 192.168.1.1, je vais tester tes fonctions. Merci d'avance.


---------------
En informatique, il n'y a pa de solution, que des problèmes :)
Reply

Marsh Posté le 29-11-2010 à 17:30:23    

Tout cela semble marché. Merci beaucoup.


---------------
En informatique, il n'y a pa de solution, que des problèmes :)
Reply

Marsh Posté le 30-11-2010 à 11:56:14    

Mieux vaut utiliser des interfaces indépendantes du protocole.
http://www.akkadia.org/drepper/userapi-ipv6.html
 
voire getnameinfo.

Reply

Marsh Posté le 01-12-2010 à 09:51:52    

intéressant tout ca, je vais me plonger dedans. Merci


---------------
En informatique, il n'y a pa de solution, que des problèmes :)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed