web-dev-qa-db-fra.com

'inet_addr': utilisez plutôt inet_pton () ou InetPton () ou définissez _WINSOCK_DEPRECATED_NO_WARNINGS

J'utilise Visual Studio 2015 et j'essaie de compiler du code qui a fonctionné avant la mise à jour de VS 2013.

'inet_addr': utilisez plutôt inet_pton () ou InetPton () ou définissez _WINSOCK_DEPRECATED_NO_WARNINGS

partner.sin_addr.s_addr = inet_addr(ip.c_str());

J'ai essayé d'utiliser les fonctions mentionnées mais elles n'étaient pas définies. J'ai essayé de définir la macro dans de nombreux endroits différents, mais rien ne s'est produit. Un autre thread a dit que je devrais inclure Ws2tcpip.h au lieu de WinSock2 et ajouter Ws2_32.lib. J'ai déjà ajouté la bibliothèque, et quand j'ai utilisé l'inclusion, rien ne s'est passé. Que se passe-t-il?!

13
The Count

La chaîne ip peut être convertie en la structure in_addr avec la fonction InetPton . Il est utilisé comme ceci:

InetPton(AF_INET, strIP, &ipv4addr)

Vous devez inclure le fichier d'en-tête "Ws2tcpip.h", utiliser la bibliothèque "Ws2_32.lib" et DLL "Ws2_32.dll").

17
Florian Haupt

Juste pour clarifier la conversion. Disons que vous avez du code en utilisant le obsolète inet_addr comme dans cet exemple:

RecvAddr.sin_addr.s_addr = inet_addr("192.168.1.1");

Il pourrait être converti dans le plus récent InetPton comme suit:

InetPton(AF_INET, _T("192.168.1.1"), &RecvAddr.sin_addr.s_addr);

La macro _ T empêche l'erreur " const incompatible avec PCWSTR ".

13
Nagev

Tu peux essayer

#pragma warning(disable:4996) 

pour utiliser inet_addr().

6
Razin Bashar

assurez-vous de définir _WINSOCK_DEPRECATED_NO_WARNINGS avant toutes les inclusions.

2
J CH