青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    為了給C++的反射做Demo,不得不研究一下HTTP的協(xié)議。后來發(fā)現(xiàn)Windows自帶了API可以用,于是就寫了個小東西。程序打開之后,如果檢測到【http://localhost:8080/vczh/FILENAME】這樣子的請求,就將一個目錄下面的東西讀出來,然后返回。于是就可以用IE來運行某個地方的網頁了。

    首先看效果圖:


    這是一個只返回網頁內容的HTTP服務器程序。
  1 #include <sdkddkver.h>
  2 #include <http.h>
  3 #include "..\..\..\..\VL++\Library\Platform\VL_Console.h"
  4 #include "..\..\..\..\VL++\Library\Data\VL_System.h"
  5 #include "..\..\..\..\VL++\Library\Data\VL_Stream.h"
  6 #include "..\..\..\..\VL++\Library\Data\VL_Communication.h"
  7 
  8 #pragma comment(lib,"Httpapi.lib")
  9 
 10 using namespace vl;
 11 using namespace vl::platform;
 12 using namespace vl::stream;
 13 using namespace vl::system;
 14 using namespace vl::communication;
 15 
 16 class HttpThread : public VL_Thread
 17 {
 18 protected:
 19     HANDLE                FHttpHandle;
 20     VByte                FBuffer[65536];
 21     PHTTP_REQUEST        FRequest;
 22     VUnicodeString        FWorkPath;
 23 
 24     VUnicodeString ToString(PCWChar Buffer)
 25     {
 26         return Buffer?Buffer:L"";
 27     }
 28 
 29     void Run()
 30     {
 31         while(!FNeedToTerminate)
 32         {
 33             ULONG Bytes=0;
 34             ULONG ErrorCode=0;
 35             if((ErrorCode=HttpReceiveHttpRequest(FHttpHandle,HTTP_NULL_ID,0,FRequest,sizeof(FBuffer),&Bytes,NULL))==NO_ERROR)
 36             {
 37                 VUnicodeString URL=ToString(FRequest->CookedUrl.pFullUrl);
 38                 VUnicodeString Query=ToString(FRequest->CookedUrl.pQueryString);
 39                 VInt PortPos=URL.Pos(L":8080/vczh/")+11;
 40                 VUnicodeString FilePath=FWorkPath+URL.SubString(PortPos,URL.Length()-PortPos-Query.Length());
 41                 GetConsole()->WriteLine(L"請求地址:"+URL);
 42                 GetConsole()->WriteLine(L"文件地址:"+FilePath);
 43 
 44                 HTTP_VERSION Version=HTTP_VERSION_1_1;
 45                 HTTP_RESPONSE Response;
 46                 memset(&Response,0,sizeof(Response));
 47                 Response.Version=Version;
 48 
 49                 if(VFSO_FileExists(FilePath))
 50                 {
 51                     VL_FileStream HtmlFile(FilePath,VL_FileStream::vomRead);
 52                     VBuffer Buffer=new VByte[(VInt)HtmlFile.Size()];
 53                     HtmlFile.Read(Buffer,(VInt)HtmlFile.Size());
 54 
 55                     HTTP_DATA_CHUNK Chunk;
 56                     Chunk.DataChunkType=HttpDataChunkFromMemory;
 57                     Chunk.FromMemory.BufferLength=(ULONG)HtmlFile.Size();
 58                     Chunk.FromMemory.pBuffer=Buffer;
 59 
 60                     Response.StatusCode=200;
 61                     Response.EntityChunkCount=1;
 62                     Response.pEntityChunks=&Chunk;
 63                     if((ErrorCode=HttpSendHttpResponse(FHttpHandle,FRequest->RequestId,HTTP_SEND_RESPONSE_FLAG_DISCONNECT,&Response,NULL,&Bytes,NULL,NULL,NULL,NULL))!=NO_ERROR)
 64                     {
 65                         GetConsole()->WriteLine(L"HttpSendHttpResponse發(fā)送頁面不存在回復失敗("+VUnicodeString((VInt)ErrorCode)+L")。");
 66                     }
 67 
 68                     delete[] Buffer;
 69                 }
 70                 else
 71                 {
 72                     Response.StatusCode=404;
 73                     if((ErrorCode=HttpSendHttpResponse(FHttpHandle,FRequest->RequestId,HTTP_SEND_RESPONSE_FLAG_DISCONNECT,&Response,NULL,&Bytes,NULL,NULL,NULL,NULL))!=NO_ERROR)
 74                     {
 75                         GetConsole()->WriteLine(L"HttpSendHttpResponse發(fā)送頁面不存在回復失敗("+VUnicodeString((VInt)ErrorCode)+L")。");
 76                     }
 77                 }
 78             }
 79             else
 80             {
 81                 GetConsole()->WriteLine(L"HttpReceiveHttpRequest失敗("+VUnicodeString((VInt)ErrorCode)+L")。");
 82             }
 83         }
 84     }
 85 public:
 86     HttpThread(HANDLE HttpHandle , VUnicodeString WorkPath):VL_Thread(true,false)
 87     {
 88         FHttpHandle=HttpHandle;
 89         FRequest=(PHTTP_REQUEST)FBuffer;
 90         FWorkPath=WorkPath;
 91     }
 92 };
 93 
 94 void vlmain()
 95 {
 96     GetConsole()->SetTitle(L"Vczh HTTP Server");
 97     GetConsole()->SetTestMemoryLeaks(true);
 98     GetConsole()->SetPauseOnExit(true);
 99     VUnicodeString WorkPath=VFileName(GetConsole()->GetAppPath()).MakeAbsolute(L"..\\Web\\").GetStrW();
100     GetConsole()->WriteLine(L"網站:"+WorkPath);
101     GetConsole()->WriteLine(L"主機名稱:"+GetHostName());
102     GetConsole()->WriteLine(L"主機地址:"+GetIpv4Address());
103 
104     ULONG ErrorCode=0;
105 
106     HTTPAPI_VERSION Version=HTTPAPI_VERSION_1;
107     if(HttpInitialize(Version,HTTP_INITIALIZE_SERVER,NULL)!=NO_ERROR)
108     {
109         GetConsole()->WriteLine(L"HttpInitialize失敗。");
110         goto VCZH_HTTP_SERVER_INITIALIZE_FAIL;
111     }
112 
113     HANDLE HttpHandle=0;
114     if(HttpCreateHttpHandle(&HttpHandle,NULL)!=NO_ERROR)
115     {
116         GetConsole()->WriteLine(L"HttpCreateHttpHandle失敗。");
117         goto VCZH_HTTP_SERVER_CREATE_HANDLE_FAIL;
118     }
119 
120     if(HttpAddUrl(HttpHandle,L"http://+:8080/vczh/",NULL)!=NO_ERROR)
121     {
122         GetConsole()->WriteLine(L"HttpAddUrl失敗,需要使用管理員身份啟動。");
123         goto VCZH_HTTP_SERVER_ADD_URL_FAIL;
124     }
125 
126     {
127         HttpThread Thread(HttpHandle,WorkPath);
128         Thread.Execute();
129         GetConsole()->WriteLine(L"按回車結束服務程序:");
130         GetConsole()->WaitForEnter();
131         Thread.SetNeedToTerminate(true);
132         Thread.WaitFor();
133     }
134 
135     if(HttpRemoveUrl(HttpHandle,L"http://+:8080/vczh/")!=NO_ERROR)
136     {
137         GetConsole()->WriteLine(L"HttpRemoveUrl失敗。");
138     }
139 VCZH_HTTP_SERVER_ADD_URL_FAIL:
140 
141     if(!CloseHandle(HttpHandle))
142     {
143         GetConsole()->WriteLine(L"CloseHandle失敗。");
144     }
145 VCZH_HTTP_SERVER_CREATE_HANDLE_FAIL:
146 
147     if(HttpTerminate(HTTP_INITIALIZE_SERVER,NULL)!=NO_ERROR)
148     {
149         GetConsole()->WriteLine(L"HttpTerminate失敗。");
150     }
151 VCZH_HTTP_SERVER_INITIALIZE_FAIL:
152 
153     GetConsole()->WriteLine(L"Vczh HTTP Server執(zhí)行結束。");
154 }
posted on 2009-06-29 05:19 陳梓瀚(vczh) 閱讀(3914) 評論(4)  編輯 收藏 引用 所屬分類: C++

評論:
# re: 殘廢版HTTP Server之小試牛刀 2009-06-29 17:09 | 巫云
崇拜……  回復  更多評論
  
# re: 殘廢版HTTP Server之小試牛刀 2009-07-06 09:19 | 余秋雨他老爹
博主是Delphi出身的哈  回復  更多評論
  
# re: 殘廢版HTTP Server之小試牛刀 2009-07-06 18:47 | 陳梓瀚(vczh)
@余秋雨他老爹
被你看出來了- -b  回復  更多評論
  
# re: 殘廢版HTTP Server之小試牛刀 2011-02-10 18:58 | loop
那幾個goto看著不是很爽,呵呵。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日本不卡| 亚洲精品免费看| 亚洲成色999久久网站| 国产精品美女黄网| 国产精品jizz在线观看美国 | 欧美伊人久久| 欧美一区二区三区四区夜夜大片| 亚洲欧美伊人| 久久综合伊人| 最新日韩av| 亚洲影院免费| 久久九九国产精品怡红院| 老司机午夜精品| 欧美午夜一区二区三区免费大片| 国产九色精品成人porny| 影音先锋亚洲精品| 日韩视频永久免费| 欧美一级视频| 亚洲国产精品t66y| 亚洲影院污污.| 麻豆成人在线| 国产精品久久久久久av下载红粉| 狠狠狠色丁香婷婷综合激情| 亚洲国产三级在线| 香蕉乱码成人久久天堂爱免费| 久久久久久久网站| 一本久久精品一区二区| 久久精品成人一区二区三区| 欧美激情女人20p| 国产一区二区三区四区hd| 99在线观看免费视频精品观看| 先锋影音国产一区| 欧美在线亚洲在线| 久久精品女人| 欧美日韩伦理在线免费| 国产精品欧美一区二区三区奶水 | 美女精品网站| 国产精品久久| av成人天堂| 免费一区二区三区| 午夜欧美电影在线观看| 欧美日韩亚洲视频一区| 亚洲国产美女| 久久综合给合| 欧美一区二区大片| 国产精品免费视频观看| 亚洲色图在线视频| 最新国产の精品合集bt伙计| 久久免费国产精品| 国产在线日韩| 快she精品国产999| 亚洲欧美日本另类| 国产精品日本欧美一区二区三区| 夜夜嗨av一区二区三区| 91久久香蕉国产日韩欧美9色| 久久免费高清| 亚洲国产成人av在线| 久久久噜噜噜久久| 久久国产88| 国产区精品在线观看| 亚洲欧美国产毛片在线| 宅男噜噜噜66一区二区| 国产精品地址| 欧美中文在线免费| 欧美专区福利在线| 韩国视频理论视频久久| 久久久久免费观看| 久久欧美中文字幕| 亚洲欧洲综合另类| 亚洲精品国产精品久久清纯直播| 欧美成人精品在线| 99精品欧美一区二区三区| 亚洲免费av网站| 欧美小视频在线| 午夜精品网站| 欧美在线电影| 亚洲精品久久视频| 日韩视频二区| 国产日韩欧美在线一区| 欧美chengren| 欧美日韩成人在线播放| 欧美亚洲一区二区在线| 久久精品一级爱片| 亚洲精品久久久久久久久| 亚洲精品永久免费精品| 国产精品免费在线| 美女国产一区| 欧美少妇一区| 久久这里有精品视频| 欧美国产第二页| 亚洲成在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲电影在线免费观看| 亚洲黄色尤物视频| 国产老肥熟一区二区三区| 久久久综合网站| 欧美日本网站| 久久久久国产精品人| 欧美激情视频一区二区三区不卡| 亚洲欧美日韩国产成人精品影院| 久久精品视频免费| 在线午夜精品自拍| 久久国产综合精品| 亚洲一区二区三区精品在线 | 亚洲综合色在线| 久久精品视频免费播放| 亚洲一级二级| 欧美1级日本1级| 久久精品主播| 国产精品久久久99| 最新精品在线| 亚洲激情av| 久久精品国产99精品国产亚洲性色 | 欧美国产91| 国产欧美日韩视频一区二区三区| 亚洲大胆女人| 国内外成人免费激情在线视频网站| 亚洲电影免费观看高清完整版| 国产视频久久久久| 宅男噜噜噜66一区二区| 日韩午夜在线电影| 久久夜色撩人精品| 久久综合久久综合久久| 国产美女精品视频免费观看| 日韩视频免费观看| 亚洲美女淫视频| 欧美激情91| 欧美激情一区二区三区| 在线欧美三区| 久久精品视频免费观看| 久久久免费精品视频| 国产精品一区免费视频| 一区二区福利| 在线视频免费在线观看一区二区| 欧美成人国产| 亚洲经典在线| 国产精品99久久久久久人| 欧美日韩成人综合天天影院| 亚洲国产午夜| 99精品国产热久久91蜜凸| 欧美激情免费在线| 亚洲精品在线电影| 一区二区三区国产精华| 欧美日韩亚洲成人| 亚洲一区二区在线视频| 欧美一级播放| 国模一区二区三区| 久久天天狠狠| 亚洲激情视频在线| 亚洲系列中文字幕| 伊人成综合网伊人222| 国产日韩欧美在线看| 午夜伦理片一区| 久热re这里精品视频在线6| 韩国精品主播一区二区在线观看| 久久久亚洲高清| 亚洲电影下载| 午夜精品久久久久久久久| 国产在线观看精品一区二区三区 | 国产精品h在线观看| 亚洲中字黄色| 美女日韩欧美| 一区二区三区欧美成人| 国产精品影片在线观看| 久久琪琪电影院| 9色国产精品| 久久九九热免费视频| 亚洲高清不卡一区| 欧美日韩精品综合在线| 欧美一区二区三区免费视| 美女免费视频一区| 亚洲一区二区在线免费观看视频| 国产欧美在线观看| 欧美激情精品久久久久久免费印度 | 亚洲国产精品一区二区www| 亚洲午夜久久久| 黄色成人免费观看| 欧美视频一区二区三区…| 久久久精彩视频| 999在线观看精品免费不卡网站| 久久se精品一区二区| 9久re热视频在线精品| 国产亚洲综合精品| 欧美日韩精品在线播放| 久久久蜜桃精品| 亚洲伊人观看| 日韩视频免费观看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美激情国产精品| 午夜在线观看免费一区| 亚洲精品国产精品久久清纯直播| 国产精品天天摸av网| 欧美大片第1页| 欧美在线观看视频一区二区三区 | 夜夜嗨av一区二区三区四季av | 韩国av一区二区| 国产精品久久久久久久久久久久| 欧美不卡高清| 国产精品大全| 亚洲欧美国产三级|