Работа с использованием 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 ()); }