Window Systemの通信ライブラリのC ++のアクセスハードウェア・プラットフォームを使用した作業は、Windowsのみのシステムの下で、DLL関数にそれらを呼び出すと、通信だけでなく、バックエンドサーバーにデータを報告するので、片付けC ++するためにC ++を使用することができますネットワーク要求の方法。
最初の部分:知識
ポイントの使用C ++の基礎
1.C ++関連
- クラス定義
- 関数の定義
- コンストラクタとデストラクタ
- マクロの使用の#ifdef
2.HTTP関連
- HTTPヘッダ
- GETとPOSTの違いのメッセージ形式
パートII:コード
ネットワーク要求コードのC ++実装を貼り付け、実際には、本質的には、HTTP形式のメッセージが発生したソケットを使用することです。
1.ファンクション・クレーム
- HttpConnect.h
-
クラスHttpConnect { パブリック: 無効socketHttp(STD ::文字列のホスト、のstd ::文字列リクエスト)。 空POSTDATA(STD ::文字列のホスト、のstd ::文字列パス、のstd ::文字列POST_CONTENT)。 空のgetData(STD ::文字列のホスト、のstd ::文字列パス、のstd ::文字列GET_CONTENT)。 HttpConnect(); 〜HttpConnect(); }。
2.機能実装
- HttpConnect.cpp
-
WIN32の#ifdef の#pragmaコメント(libに、 "WS2_32.LIB") #endifの の#include の#include の#include の#include "HttpConnect.h" HttpConnect :: HttpConnect() { WIN32が#ifdefの //ここであなたは、それを初期化する必要がありますか、他空戻されGETHOSTBYNAME ; WSADATA WSA = {0} WSAStartupの(MAKEWORD(2,2)、およびWSA); #endifの } HttpConnect ::〜HttpConnect() { } ボイドHttpConnect :: socketHttp(STD ::列ホスト、STD: :要求文字列) { int型数sockfd; のsockaddr_inアドレスをストラクト; たhostentをストラクト*サーバと、 数sockfd =ソケット(AF_INET、SOCK_STREAM、0); address.sin_family = AF_INET。 address.sin_port = htons(8091)。 サーバ=のgethostbyname(host.c_str())。 memcpy((CHAR *)&address.sin_addr.s_addr、(CHAR *)サーバ- > h_addr、サーバ- > h_length)。 もし(-1 ==接続(数sockfd、(構造体のsockaddr *)&アドレス、はsizeof(アドレス))){ のstd :: coutの<< "接続エラー!" <<はstd ::てendl; リターン; } のstd :: COUT <<要求<<はstd :: ENDL。 #ifdef WIN32の 送信(数sockfd、request.c_str()、request.size()、0); #else 書き込み(数sockfd、request.c_str()、request.size())。 #endifの チャーBUF [1024 * 1024] = {0}。 INT = 0をオフセット。 int型のrc; WIN32の#ifdef (RC = RECV(数sockfd、BUF +オフセット、1024,0))一方 、(RCながら=(数sockfd、BUF +オフセットを読み取ります #endifの { オフセット+ = RC。 } の#ifdef WIN32 closesocket(数sockfd)。 #else 近い(数sockfd)。 #endifの BUF [オフセット] = 0; std :: coutの<< BUF <<はstd ::てendl; } ボイドHttpConnect :: POSTDATA(スタンダード::文字列ホストのstd ::文字列パス、のstd ::文字列POST_CONTENT) { // POST请求方式 のstd ::にstringstreamストリーム。 ストリーム<<「POST」<<パス。 ストリーム<< "HTTP / 1.0 \ rを\ n"は、 ストリーム<< "ホスト:" <<ホスト<< "\ rを\ n"は、 ストリーム<<「のUser-Agent:Mozillaの/ 5.0(Windowsの; U; Windows NTの5。 ストリーム<< "コンテンツタイプ:application / x-www-form-urlencodedで\ R \ n"; ストリーム<< " ストリーム<< "接続:近い\ rを\ nは\ rを\ n"は、 ストリーム<< post_content.c_str()。 socketHttp(ホスト、stream.str())。 } ボイドHttpConnect ::のgetData(スタンダード::文字列ホストのstd ::文字列パス、のstd ::文字列GET_CONTENT) { // GET请求方式 のstd ::にstringstreamストリーム。 ストリーム<< "GET" <<パス<< "?" << GET_CONTENT; ストリーム<< "HTTP / 1.0 \ rを\ n"は、 ストリーム<< "ホスト:" <<ホスト<< "\ rを\ n"は、 ストリーム<< "のUser-Agent:Mozillaの/ 5.0(Windowsの; U; Windows NTの5.1; ZH-CN; RV:1.9.2.3)のGecko / 20100401 Firefoxの/ 3.6.3 \ rを\ n"は、 ストリーム<< "接続:近い\ rを\ nは\ rを\ n"は、 socketHttp(ホスト、stream.str())。 }