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

隨筆-341  評論-2670  文章-0  trackbacks-0
    為了給C++的反射做Demo,不得不研究一下HTTP的協議。后來發現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發送頁面不存在回復失敗("+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發送頁面不存在回復失敗("+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執行結束。");
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>
            日韩亚洲欧美在线观看| 午夜国产不卡在线观看视频| 亚洲国产免费看| 亚洲一区二区网站| 亚洲电影在线看| 性欧美8khd高清极品| 欧美麻豆久久久久久中文| 伊人久久综合| 久久亚洲一区二区| 久久成人免费电影| 国产偷久久久精品专区| 亚洲自拍电影| 国产精品99久久久久久久久久久久| 欧美大成色www永久网站婷| 亚洲电影免费在线| 欧美大片18| 免费成人小视频| 亚洲激情一区二区三区| 欧美大片在线影院| 欧美α欧美αv大片| 亚洲狼人综合| 日韩一区二区免费高清| 欧美日韩一区在线| 亚洲欧美成人在线| 午夜精品av| 国产综合一区二区| 欧美大片va欧美在线播放| 欧美成人午夜77777| 亚洲精品久久久久中文字幕欢迎你 | 欧美成年人视频网站| 亚洲第一精品福利| 最新亚洲一区| 国产精品国色综合久久| 久久国产日韩| 蜜桃av一区二区三区| 一区二区三区精密机械公司| 一区二区免费在线观看| 国产深夜精品| 亚洲剧情一区二区| 亚洲精品久久久久中文字幕欢迎你 | 亚洲午夜性刺激影院| 国产精品综合网站| 蜜臀va亚洲va欧美va天堂| 欧美成年人在线观看| 亚洲小少妇裸体bbw| 亚洲欧美综合网| 亚洲国产欧洲综合997久久| 亚洲精选大片| 精品成人一区| 一本大道久久a久久精品综合| 国产伦精品一区二区三区四区免费| 久久久久久久网站| 欧美日韩在线播放一区| 久久综合精品国产一区二区三区| 欧美高清在线观看| 久久经典综合| 欧美日韩黄色一区二区| 久久免费国产精品| 欧美午夜激情小视频| 免费成人你懂的| 国产精品每日更新| 亚洲欧洲日韩综合二区| 国产一区白浆| 99精品视频免费| 亚洲国产精品久久久| 亚洲欧美综合| 亚洲欧美高清| 欧美日韩精品综合在线| 欧美二区在线播放| 国模私拍一区二区三区| 亚洲一区二区三区四区中文| 亚洲日本久久| 老司机久久99久久精品播放免费| 欧美一区免费视频| 欧美视频中文一区二区三区在线观看| 美女主播一区| 狠狠色噜噜狠狠色综合久| 亚洲午夜一区二区| 亚洲伊人一本大道中文字幕| 欧美巨乳在线| 亚洲另类黄色| 夜夜嗨一区二区三区| 欧美成人dvd在线视频| 男女精品网站| 1769国产精品| 久久中文字幕导航| 欧美91大片| 亚洲国产欧美精品| 女女同性精品视频| 欧美激情导航| 亚洲乱亚洲高清| 欧美激情五月| 亚洲精品午夜精品| 在线综合视频| 欧美午夜免费电影| 亚洲无线观看| 久久www成人_看片免费不卡| 国产精品日韩在线播放| 亚洲欧美欧美一区二区三区| 欧美一区在线视频| 国产一区美女| 一本色道久久综合狠狠躁的推荐| 欧美视频在线观看视频极品| 亚洲国产91| 日韩午夜av| 欧美日韩一区二区三区四区在线观看| 亚洲精品国产精品国产自| 一区二区三区成人| 国产精品久久久久9999高清| 亚洲欧美在线另类| 久久中文字幕导航| 亚洲欧洲一区二区三区久久| 欧美精品一区二区三区很污很色的| 亚洲美女视频| 性刺激综合网| 雨宫琴音一区二区在线| 欧美激情视频一区二区三区在线播放| 夜夜嗨av一区二区三区网页| 欧美一区二区三区播放老司机| 国产一区二区三区观看| 六月天综合网| 一区二区国产日产| 久久久一二三| 一区二区三区国产在线观看| 国产伦精品一区二区三区免费| 欧美资源在线| 亚洲精品在线免费| 久久久99爱| 日韩亚洲一区二区| 国产色视频一区| 欧美激情在线有限公司| 午夜精品久久久| 亚洲国产小视频在线观看| 亚洲欧美日韩精品久久奇米色影视| 国内精品美女av在线播放| 欧美88av| 欧美一区二区成人| 亚洲精品综合久久中文字幕| 久久伊人精品天天| 亚洲视频精选在线| 一区二区三区在线视频播放| 欧美视频在线播放| 男人天堂欧美日韩| 欧美一区二区三区的| 日韩视频在线一区二区三区| 免费不卡亚洲欧美| 亚洲欧美一区二区原创| 亚洲精品男同| 影音先锋欧美精品| 国产欧美三级| 欧美吻胸吃奶大尺度电影| 男人的天堂亚洲在线| 久久精品国产一区二区电影| 亚洲一级高清| 夜夜嗨av一区二区三区四季av | 久久先锋资源| 性欧美超级视频| 亚洲午夜高清视频| 亚洲九九爱视频| 亚洲人成高清| 亚洲国产电影| 亚洲第一精品久久忘忧草社区| 久久久另类综合| 久久久www免费人成黑人精品| 亚洲一区二区成人在线观看| 一本色道久久综合一区| 亚洲乱码国产乱码精品精天堂 | 一区二区三区国产| 亚洲精品日韩在线| 亚洲人成网站在线观看播放| 欧美激情综合色| 亚洲成人在线网| 欧美激情欧美狂野欧美精品| 欧美成人免费va影院高清| 免费观看在线综合| 一本色道久久综合精品竹菊| 欧美激情一区二区在线| 乱人伦精品视频在线观看| 久久精品日产第一区二区三区| 欧美一区1区三区3区公司| 性做久久久久久久久| 欧美一区二区在线免费播放| 欧美在线免费视屏| 久久久久99| 美女任你摸久久| 欧美另类69精品久久久久9999| 欧美大片免费看| 欧美人交a欧美精品| 欧美网站在线| 国产视频精品免费播放| 黄色小说综合网站| 亚洲激情视频网| 日韩视频在线一区二区三区| 99国内精品久久| 午夜精品视频在线| 久久人人精品| 亚洲日韩成人| 亚洲欧美日韩天堂| 麻豆91精品91久久久的内涵| 欧美日韩福利|