[その他注意事項] C ++の下で、Windowsのネットワーク要求

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())。
    }
                

おすすめ

転載: www.cnblogs.com/nicojerry/p/11973800.html