Obtenir ma propre adresse IP en utilisant getsockname ()

J’essaie d’obtenir ma propre adresse IP en essayant de me connecter () à 8.8.8.8 en utilisant UDP socket UDP , puis en appelant la fonction getsockname() .

J’ai écrit une fonction get_my_ip() , et le code a fonctionné quand il a été placé dans mon programme serveur, mais en tant que fonction distincte, il échoue. Il imprime des caractères étranges au lieu de mon adresse IP.

La seule chose que j’ai changée du code dans mon programme de serveur était return NULL au lieu de return 1, ou retourne 2, car c’était à l’intérieur de int main() .

Est-ce que quelqu’un peut voir pourquoi mon programme ne fonctionne pas?

Je vous remercie.

Vous devez initialiser addrlen.

 addrlen = sizeof remoteaddr; getsockname(sockfd, (struct sockaddr*)&remoteaddr, &addrlen); 

Vous devez lancer le sin_addr dans votre appel inet_ntop() . Ça devrait être comme ça:

 inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), remoteIP, addrlen); inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), remoteIP, addrlen);