"inet addr": вместо этого используйте inet pton() или InetPton() или определите WINSOCK устаревшие предупреждения

Я использую Visual Studio 2015 и пытаюсь скомпилировать код, который работал до обновления с VS 2013.

'inet_addr': вместо этого используйте inet_pton() или InetPton() или определите _WINSOCK_DEPRECATED_NO_WARNINGS

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

Я попытался использовать упомянутые функции, но они не были определены. Я попытался определить макрос во многих разных местах, но ничего не произошло. Другой поток сказал, что я должен включить Ws2tcpip.ч вместо В winsock2 и добавить ws2_32 в.движение за освобождение. У меня уже есть библиотека, и когда я использовал include, ничего не произошло. Что происходит?!

4 ответов


строка ip может быть преобразована в для структуры InetPton. Он используется следующим образом:

InetPton(AF_INET, strIP, &ipv4addr)

вам нужно включить " Ws2tcpip.H "файл заголовка, используйте библиотеку" Ws2_32.lib "и DLL" Ws2_32.файл DLL."


просто чтобы сделать преобразование ясно. Предположим, у вас есть код, использующий устаревший сокеты inet_addr как в этом примере:

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

Он может быть преобразован в новый InetPton следующим образом:

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

на ІТ макрос предотвращает "const char несовместимо с PCWSTR" ошибка.


Вы можете попробовать

#pragma warning(disable:4996) 

использовать inet_addr().


убедитесь, что вы определяете _WINSOCK_DEPRECATED_NO_WARNINGS перед всеми include.