[Другие примечания] ++ под запрошенные C для Windows

Работа с использованием C ++ доступ аппаратная платформа на библиотеку связи Window System, можно использовать только C ++ называть их функции длл и общение, но и сообщать эти данные на бэкэнд сервер, так прибрала C ++ под Windows, системы Способ по запросу сети.

 


 

Первая часть: знание

Используемые C ++ основы точек

1.С ++ связанные

  • определение класса
  • определение функции
  • Конструктор и деструктор
  • #ifdef использование макросов

2.HTTP связанные

  • HTTP заголовок
  • Формат сообщения о разнице между GET и POST

 


 

Часть II: Код

Вставить C ++ выполнения кода запроса сети, на самом деле, суть заключается в использовании Http сообщения в формате Socket происходит.

1. претензии функции

  • HttpConnect.h
  • класс HttpConnect {
        общественности:
            недействительный socketHttp (станд :: строка хост, StD :: строки запрос);
            
            недействительный PostData (станд :: строка хост, StD :: струнного пути, станд :: строка POST_CONTENT);
            
            недействительная GetData (станд :: строка хост, StD :: струнного пути, станд :: строка GET_CONTENT);
            
            HttpConnect ();
            
            ~ HttpConnect ();
    };
                

2. Функции реализованы

  • HttpConnect.cpp
  • #ifdef WIN32
    #pragma комментарий (Пб "ws2_32.lib")
    #endif
    #включают 
    #включают 
    #включают 
    
    #include "HttpConnect.h"
    
    HttpConnect :: HttpConnect ()
    {
    #ifdef WIN32
        // Здесь мы должны инициализировать его, в противном случае остаться пустыми возвращается gethostbyname
        WSADATA WSA = {0};
        WSAStartup (MAKEWORD (2, 2), & WSA);
    #endif
    }
    
    HttpConnect :: ~ HttpConnect ()
    {
    
    }
    недействительным HttpConnect :: socketHttp (станд :: строка хоста, StD :: строку запроса)
    {
        INT sockfd;
        STRUCT sockaddr_in адрес;
        структура hostent * сервер;
    
        sockfd = сокет (AF_INET, SOCK_STREAM, 0);
        address.sin_family = AF_INET;
        address.sin_port = htons (8091);
        Сервер = gethostbyname (host.c_str ());
        тетср ((символ *) & address.sin_addr.s_addr, (символ *) server-> h_addr, server-> h_length);
    
        если (-1 == Connect (sockfd, (структура SOCKADDR *) & адрес, SizeOf (адрес))) {
            станд :: соиЬ << «Ошибка соединения!» << станд :: епсИ;
            возвращение;
        }
    
        станд :: соиЬ << запрос << станд :: епсИ;
    #ifdef WIN32
        отправить (sockfd, request.c_str (), request.size (), 0);
    #else
        записи (sockfd, request.c_str (), request.size ());
    #endif
        символ BUF [1024 * 1024] = {0};
    
    
        INT смещение = 0;
        INT гс;
    
    #ifdef WIN32
        в то время как (гс = RECV (sockfd, ЬиЕ + смещение, 1024,0))
    #else
        в то время как (RC = чтение (sockfd, ЬиЕ + смещение, 1024))
    #endif
        {
            офсет + = гс;
        }
    
    #ifdef WIN32
        closesocket (sockfd);
    #else
        близко (sockfd);
    #endif
        ЬиЕ [смещение] = 0;
        станд :: соиЬ << ЬиЕ << станд :: епсИ;
    }
    
    аннулированию HttpConnect :: PostData (станд :: строка хоста, StD :: строка пути, StD :: строка POST_CONTENT)
    {
        // метод запроса POST
        станд :: stringstream поток;
        поток << "POST" << путь;
        Поток << "HTTP / 1.0 \ г \ п";
        Поток << "Ведущий:" << хозяин << "\ г \ п";
        Поток << "User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; ж-CN; с.в.: 1.9.2.3) Gecko / 20100401 Firefox / 3.6.3 \ г \ п";
        Поток << "Content-Type: применение / х-WWW-форм-urlencoded \ г \ п";
        Поток << "Content-Length:" << post_content.length () << "\ г \ п";
        Поток << «Подключение: закрыть \ г \ п \ г \ п»;
        поток << post_content.c_str ();
        
        socketHttp (хост, stream.str ());
    }
    
    аннулированию HttpConnect :: GetData (станд :: строка хоста, StD :: строка пути, StD :: строка GET_CONTENT)
    {
        // метод запроса GET
        станд :: stringstream поток;
        Поток << "GET" << путь << "?" << GET_CONTENT;
        Поток << "HTTP / 1.0 \ г \ п";
        Поток << "Ведущий:" << хозяин << "\ г \ п";
        Поток << "User-Agent: Mozilla / 5.0 (Windows; U; Windows NT 5.1; ж-CN; с.в.: 1.9.2.3) Gecko / 20100401 Firefox / 3.6.3 \ г \ п";
        Поток << «Подключение: закрыть \ г \ п \ г \ п»;
    
        socketHttp (хост, stream.str ());
    }
                

рекомендация

отwww.cnblogs.com/nicojerry/p/11973800.html