C++, ошибка в небольшом клиент-сервер приложении

решил начать изучать сетевое программирование, начал писать простой клиент-серверное приложение, по видео с ютуба, но столкнулся с проблемой, что код выдает 159 ошибок и все ошибки пишет, что в файлах WinSock.h, ws2def.h, Ws2tcpip.h . введите сюда описание изображения

введите сюда описание изображения

Вот код Клиента в файле Client.cpp



#include <iostream>
#include <windows.h>
#include <Winsock2.h>
#include <Ws2tcpip.h>


#pragma warning(disable:4005)

using namespace std;

int main()
{
    WSADATA wsaData;
    ADDRINFO hints; // продсказки для клиента о сервере
    ADDRINFO* addrResult = NULL; // куда получим данные о сервере
    SOCKET ConnectSocket = INVALID_SOCKET; // пока не создали соккет

    const char* sendBuffer = "Hello from client!"; // для сервера
    char recvBuffer[512];

    int result; // код значения 

    result = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (result != 0)
    {
        cout << "WSAStartup failed, resilt " << result << endl;
        return 1;
    }

    ZeroMemory(&hints, sizeof(hints)); // зануляем все поля hints (все параметры hints равны 0)
    hints.ai_family = AF_INET; // ethernet
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP; // протокол TCP/IP

    result = getaddrinfo("localhost", "666", &hints, &addrResult);  // информация и сервере  
    if (result != 0)
    {
        cout << "getaddrinfo failed with error: " << result << endl;
        WSACleanup();
        return 1;
    }

    ConnectSocket = socket(addrResult->ai_family, addrResult->ai_socktype, addrResult->ai_protocol);
    if (ConnectSocket == INVALID_SOCKET)
    {
        cout << "Socket creation failed" << endl;
        freeaddrinfo(addrResult); // освобождаем addrResult
        WSACleanup();
        return 1;
    }

    result = connect(ConnectSocket, addrResult->ai_addr, static_cast<int>(addrResult->ai_addrlen));

    if (result == SOCKET_ERROR)
    {
        cout << "Enable connect to server" << endl;
        closesocket(ConnectSocket); // Закрываем соккет
        ConnectSocket = INVALID_SOCKET; // обнуляем
        freeaddrinfo(addrResult);
        return 1;
    }

    result = send(ConnectSocket, sendBuffer, static_cast<int>(strlen(sendBuffer)), 0); // отправление серверу

    if (result == SOCKET_ERROR)
    {
        cout << "Send failed, error: " << result << endl;
        closesocket(ConnectSocket);
        ConnectSocket = INVALID_SOCKET;
        freeaddrinfo(addrResult);
        return 1;
    }

    cout << "Send: " << result << " bytes" << endl;

    result = shutdown(ConnectSocket, SD_SEND);

    if (result == SOCKET_ERROR)
    {
        cout << "Shotdown socket error" << endl;
        closesocket(ConnectSocket);
        ConnectSocket = INVALID_SOCKET;
        freeaddrinfo(addrResult);
        return 1;
    }


    do {

        ZeroMemory(recvBuffer, sizeof(recvBuffer));
        result = recv(ConnectSocket, recvBuffer, sizeof(recvBuffer), 0);

        if (result > 0)
        {
            cout << "Received " << result << "bytes" << endl;
            cout << "Received data: " << recvBuffer << endl;
        }
        else if (result == 0)
        {
            cout << "Connection close" << endl;
        }
        else
        {
            cout << "Recv failed with error" << endl;
        }
    } while (result > 0);

    closesocket(ConnectSocket);
    ConnectSocket = INVALID_SOCKET;
    freeaddrinfo(addrResult);
    return 0;

} 

Ответы (2 шт):

Автор решения: JOKKEU TINKERINO

Проблема была в том что я подключил Winsock2.h после windows.h а надо до него.

→ Ссылка
Автор решения: user7860670

Проблема в том, что заголовочные файлы Windows SDK не сконфигурированы.

По-умолчанию при включении windows.h также включается базовый заголовочный файл winsock.h. Такое поведение не совместимо с включением winsock2.h. Соответственно для использования winsock2.h при сборке необходимо указывать препроцессорную директиву WIN32_LEAN_AND_MEAN.

Кроме того, перед использованием любых заголовочных файлов из Windows SDK необходимо либо вручную устанавливать директивы, задающие версию целевой платформы, либо включать первым файл sdkddkver.h, задающий эти директивы для последней доступной платформы в текущем SDK.

#pragma warning(disable:4005) не нужно

→ Ссылка