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

蝸牛的家
男兒當(dāng)自強
posts - 48,  comments - 21,  trackbacks - 0
#pragma once

#include 
<WinSock2.h>


class CHpServer
{
public:
    CHpServer(
void);
    
virtual ~CHpServer(void);

    BOOL StartSever(CString RootDir, u_short port);
    
void StopServer();

protected:
    BOOL RecvRequest(SOCKET sk, HANDLE hExit, PCHAR pBuf, DWORD bufSize);
    
int ParseRequest(PCHAR lpBuf, CString &fileName);
    
void SendFile(SOCKET sk, HANDLE hExit, CString filePath);
    BOOL SendBuffer(SOCKET sk, HANDLE hExit, PCHAR pBuf, DWORD bufSize);


    
static DWORD WINAPI ListenThread(PVOID lParam);
    
static DWORD WINAPI ClientThread(PVOID lParam);

private:
    SOCKET m_lsSocket;
    CString m_RootDir;
}
;


typedef 
struct stg_Req
{
    SOCKET skClient;
    HANDLE hExitEvent;
    CString rootDir;
    CHpServer
* pThis;
}
REQUEST, *LPReq;


  1#include "StdAfx.h"
  2#include "HpServer.h"
  3
  4CHpServer::CHpServer(void)
  5{
  6    WSADATA wsaData;
  7    WSAStartup(MAKEWORD(2,2), &wsaData);
  8
  9    m_lsSocket = INVALID_SOCKET;
 10}

 11
 12CHpServer::~CHpServer(void)
 13{
 14    WSACleanup();
 15}

 16
 17BOOL CHpServer::StartSever(CString RootDir, u_short port)
 18{
 19    if (strcmp(RootDir, _T("")) == 0)
 20        return FALSE;
 21
 22    m_RootDir = RootDir;
 23    m_lsSocket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
 24    SOCKADDR_IN sk_Addr;
 25
 26    sk_Addr.sin_family = AF_INET;
 27    sk_Addr.sin_port = htons(port);
 28    sk_Addr.sin_addr.s_addr = ADDR_ANY;
 29
 30    if (bind(m_lsSocket, (LPSOCKADDR)&sk_Addr, sizeof(struct sockaddr)) == SOCKET_ERROR)
 31    {
 32        closesocket(m_lsSocket);
 33        return FALSE;
 34    }

 35    if (listen(m_lsSocket, 10== SOCKET_ERROR)
 36    {
 37        closesocket(m_lsSocket);
 38        return FALSE;
 39    }

 40    
 41    DWORD dwThreadID;
 42    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ListenThread, this, NULL, &dwThreadID);
 43    if (hThread == INVALID_HANDLE_VALUE)
 44        return FALSE;
 45    CloseHandle(hThread);
 46
 47    return TRUE;
 48}

 49
 50void CHpServer::StopServer()
 51{
 52    if (m_lsSocket != INVALID_SOCKET)
 53    {
 54        closesocket(m_lsSocket);
 55        m_lsSocket = INVALID_SOCKET;
 56    }

 57}

 58
 59DWORD WINAPI CHpServer::ListenThread(PVOID lParam)
 60{
 61    CHpServer* pThis = (CHpServer*)lParam;
 62    HANDLE hExitEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
 63
 64    while (TRUE)
 65    {
 66        SOCKADDR_IN sk_Addr;
 67        int nSize = sizeof(sk_Addr);
 68        SOCKET skClient = accept(pThis->m_lsSocket, (PSOCKADDR)&sk_Addr, &nSize);
 69
 70        if (skClient == INVALID_SOCKET)
 71            break;
 72
 73        LPReq lpReq = new REQUEST;
 74        lpReq->skClient = skClient;
 75        lpReq->hExitEvent = hExitEvent;
 76        lpReq->rootDir = pThis->m_RootDir;
 77
 78        DWORD dwThreadID;
 79        HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ClientThread, lpReq, NULL, &dwThreadID);
 80        if (hThread == INVALID_HANDLE_VALUE)
 81        {
 82            closesocket(skClient);
 83            delete lpReq;
 84            continue;
 85        }

 86        CloseHandle(hThread);
 87    }

 88    SetEvent(hExitEvent);
 89    Sleep(1000);    //等待服務(wù)線程退出
 90    CloseHandle(hExitEvent);
 91
 92    return 1;
 93}

 94
 95DWORD WINAPI CHpServer::ClientThread(PVOID lParam)
 96{
 97    LPReq lpReq = (LPReq)lParam;
 98    
 99    CHAR buf[1024];
100
101    if (!lpReq->pThis->RecvRequest(lpReq->skClient, lpReq->hExitEvent, buf, 1024))
102    {
103        closesocket(lpReq->skClient);
104        delete lpReq;
105        return 1;
106    }

107    CString filePath = lpReq->rootDir;
108
109    if (!lpReq->pThis->ParseRequest(buf, filePath))
110    {
111        closesocket(lpReq->skClient);
112        delete lpReq;
113        return 1;
114    }

115    
116    lpReq->pThis->SendFile(lpReq->skClient, lpReq->hExitEvent, filePath);
117
118    closesocket(lpReq->skClient);
119    delete lpReq;
120    return 1;
121}

122
123
124BOOL CHpServer::RecvRequest(SOCKET sk, HANDLE hExit, PCHAR pBuf, DWORD bufSize)
125{
126    memset(pBuf, 0, bufSize);
127
128    WSABUF wsaBuf;
129    WSAOVERLAPPED wsaOver;
130
131    wsaBuf.buf = pBuf;
132    wsaBuf.len = bufSize;
133    wsaOver.hEvent = WSACreateEvent();
134    
135    DWORD dwRecvSize, dwFlags = 0;
136    int nRet = WSARecv(sk, &wsaBuf, 1&dwRecvSize, &dwFlags, &wsaOver, NULL);
137    
138    if (nRet != 0 && WSAGetLastError() != WSA_IO_PENDING)
139    {
140        CloseHandle(wsaOver.hEvent);
141        return FALSE;
142    }

143
144    if (nRet != 0)
145    {
146        HANDLE hEvents[2= {wsaOver.hEvent, hExit};
147
148        if ( WaitForMultipleObjects(2, hEvents, FALSE, INFINITE) != 0)
149        {
150            CloseHandle(wsaOver.hEvent);
151            return FALSE;
152        }

153
154        if (!WSAGetOverlappedResult(sk,
155                &wsaOver,
156                &dwRecvSize,
157                FALSE,
158                &dwFlags))
159        {
160            CloseHandle(wsaOver.hEvent);
161            return FALSE;
162        }

163    }

164
165    CloseHandle(wsaOver.hEvent);
166    return TRUE;
167}

168
169int CHpServer::ParseRequest(PCHAR lpBuf, CString &filePath)
170{
171    PCHAR cpNtToken;
172    PCHAR cpToken = strtok_s(lpBuf, _T(" \n"), &cpNtToken);
173
174    if (strcmp(cpToken, _T("GET")) != 0)
175        return 0;
176
177    cpToken = strtok_s(NULL, _T(" \n"), &cpNtToken);
178    if (cpToken == NULL)
179        return 0;
180    
181    filePath.Format(_T("%s%s"),filePath, cpToken);
182
183    return 1;
184}

185
186
187void CHpServer::SendFile(SOCKET sk, HANDLE hExit, CString fileName)
188{
189    HANDLE hFile = CreateFile(fileName,
190        GENERIC_READ,
191        FILE_SHARE_READ,
192        NULL,
193        OPEN_EXISTING,
194        FILE_ATTRIBUTE_NORMAL,
195        NULL);
196
197    if (hFile == INVALID_HANDLE_VALUE)
198        return;
199
200    DWORD dwSize = GetFileSize(hFile,NULL);
201    TCHAR pResponseHeader[1024];
202    sprintf_s(pResponseHeader, 1024,
203        _T("HTTP/1.1 200 OK\r\nAccept-Ranges: bytes\r\nContent-Length: "\
204        "%d\r\nConnection: Keep-Alive\r\nContent-Type: text/plain\r\n\r\n"),
205        dwSize);
206    SendBuffer(sk,hExit,pResponseHeader,strlen(pResponseHeader));
207
208    static CHAR buf[1024];
209    while (WaitForSingleObject(hExit, 0== WAIT_TIMEOUT)
210    {
211        DWORD dwSize;
212        if (!ReadFile(hFile, buf, 1024&dwSize, NULL) || dwSize == 0)
213            break;
214
215        if (!SendBuffer(sk, hExit, buf, dwSize))
216            break;
217    }

218
219    CloseHandle(hFile);
220}

221
222BOOL CHpServer::SendBuffer(SOCKET sk, HANDLE hExit, PCHAR pBuf, DWORD bufSize)
223{
224    WSABUF wsaBuf;
225    WSAOVERLAPPED wsaOver;
226
227    wsaBuf.buf = pBuf;
228    wsaBuf.len = bufSize;
229    wsaOver.hEvent = WSACreateEvent();
230    
231    DWORD dwRecv, dwFlags;
232    int nRet = WSASend(sk, &wsaBuf, 1&dwRecv, 0&wsaOver, NULL); 
233    if (nRet != 0 && WSAGetLastError() != WSA_IO_PENDING)
234        return FALSE;
235    
236    if (nRet != 0)
237    {
238        HANDLE hEvents[2= {wsaOver.hEvent, hExit};
239
240        if (WaitForMultipleObjects(2, hEvents, FALSE, INFINITE) != 0)
241        {
242            CloseHandle(wsaOver.hEvent);
243            return FALSE;
244        }

245
246        if (!WSAGetOverlappedResult(sk, &wsaOver, &dwRecv, FALSE, &dwFlags))
247        {
248            CloseHandle(wsaOver.hEvent);
249            return FALSE;
250        }

251    }

252    
253    CloseHandle(wsaOver.hEvent);
254    return TRUE;
255}

256
257
posted on 2008-12-30 16:51 黑色天使 閱讀(357) 評論(0)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)開發(fā)

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩午夜黄色| 亚洲日本中文字幕区| 欧美国产91| 亚洲福利视频网| 日韩一级黄色片| 欧美日本一区| 亚洲午夜在线| 午夜日韩在线| 国产一区二区三区在线观看免费视频| 久久国产夜色精品鲁鲁99| 久久这里有精品视频| 亚洲福利国产精品| 欧美久久一级| 亚洲一区二区少妇| 久久久久久91香蕉国产| 亚洲国产一区二区a毛片| 欧美精品一区二区在线播放| 亚洲一区二区高清| 免费日韩av| 一区二区三区视频免费在线观看| 国产精品激情av在线播放| 香蕉乱码成人久久天堂爱免费 | 在线免费观看日韩欧美| 欧美精品久久久久久久| 中国亚洲黄色| 蜜臀av在线播放一区二区三区| 亚洲最新中文字幕| 国产综合在线看| 欧美日韩国产首页| 久久久亚洲成人| 亚洲一卡久久| 亚洲国产精品久久久久秋霞影院| 欧美一区午夜精品| 亚洲老板91色精品久久| 国产一区观看| 欧美三区美女| 欧美成人亚洲成人| 久久精品91| 亚洲小说区图片区| 亚洲激情在线| 免费观看成人网| 久久超碰97中文字幕| 在线亚洲观看| 亚洲激情国产精品| 狠狠综合久久| 国产乱码精品一区二区三区五月婷 | 亚洲第一天堂av| 久久久精品免费视频| 亚洲私人影院| 亚洲日韩成人| 在线观看亚洲专区| 国产亚洲成av人片在线观看桃| 欧美日韩一区二区在线观看视频 | 亚洲国产精品久久精品怡红院| 国产乱子伦一区二区三区国色天香| 欧美色综合网| 欧美精品综合| 欧美劲爆第一页| 欧美激情一区二区久久久| 久久字幕精品一区| 久久久久女教师免费一区| 欧美在线观看视频| 欧美一级午夜免费电影| 亚洲一区二区少妇| 亚洲小说欧美另类社区| 亚洲天堂黄色| 亚洲图片欧美日产| 中日韩视频在线观看| 日韩一级欧洲| 一区二区国产日产| 一区二区三区四区五区视频| 亚洲免费av电影| 99在线|亚洲一区二区| 亚洲精品在线视频观看| 亚洲日本aⅴ片在线观看香蕉| 亚洲国产高清一区| 亚洲国产婷婷| 亚洲精品视频在线播放| 亚洲另类在线一区| 一区二区三区**美女毛片| 一区二区三区欧美视频| 亚洲一区二区视频在线| 欧美亚洲免费电影| 久久精品视频在线看| 久久影院午夜论| 欧美成人性生活| 欧美性jizz18性欧美| 国产欧美精品在线观看| 国产深夜精品| 有码中文亚洲精品| 亚洲精品欧美激情| 亚洲一区二区在| 久久成人免费日本黄色| 欧美丰满少妇xxxbbb| 久久一区二区三区四区五区| 蜜臀久久久99精品久久久久久| 女人天堂亚洲aⅴ在线观看| 欧美精品久久99久久在免费线| 欧美色视频一区| 国产一区二区电影在线观看| 在线欧美日韩精品| 99成人精品| 老司机精品久久| 欧美极品在线播放| 国产精品一页| 91久久在线播放| 亚洲综合丁香| 美女网站久久| 亚洲美女在线观看| 欧美一区日韩一区| 欧美激情一区二区久久久| 国产精品羞羞答答xxdd| 伊人一区二区三区久久精品| 一本色道久久综合亚洲精品不| 欧美一区二区三区喷汁尤物| 男女激情久久| 在线视频中文亚洲| 久久夜色精品| 国产精品久久网站| 亚洲国产日韩欧美| 欧美亚洲免费电影| 亚洲国产精品久久人人爱蜜臀| 亚洲一区中文| 欧美成人a视频| 国产日韩欧美一区| 一本一本久久a久久精品牛牛影视| 久久精品99无色码中文字幕 | 亚洲色诱最新| 久久中文字幕一区二区三区| 国产精品高潮呻吟| 亚洲国产成人精品久久久国产成人一区 | 欧美一级视频| 欧美日韩精品伦理作品在线免费观看| 国产午夜精品福利| 亚洲私人影院| 亚洲国产精品久久91精品| 欧美自拍偷拍| 国产精品久久久久av| 亚洲精品在线视频观看| 久久免费精品日本久久中文字幕| 在线亚洲一区观看| 欧美成人综合一区| 欧美一级大片在线免费观看| 欧美高清在线视频| 一区在线影院| 午夜在线观看免费一区| 亚洲国产精品嫩草影院| 久久久国产成人精品| 国产精品视频久久| 亚洲私拍自拍| 亚洲精品一区二| 蜜臀99久久精品久久久久久软件 | 好吊视频一区二区三区四区 | 亚洲欧美日韩区| 亚洲精品免费网站| 美女黄毛**国产精品啪啪| 国产一区久久| 久久精品国产一区二区三区| 亚洲网址在线| 欧美日韩一卡| 一区二区精品在线| 亚洲破处大片| 欧美国产日本高清在线| 亚洲国产另类 国产精品国产免费| 久久人人97超碰人人澡爱香蕉| 亚洲欧美在线一区二区| 国产精品嫩草99a| 午夜在线播放视频欧美| 亚洲免费视频一区二区| 国产精品亚发布| 欧美亚洲午夜视频在线观看| 亚洲一区二区黄| 国产日韩欧美精品在线| 久久精品在线免费观看| 欧美在线影院| 在线观看91久久久久久| 美日韩免费视频| 老司机精品福利视频| 亚洲毛片av在线| 亚洲高清影视| 美女日韩欧美| 亚洲另类自拍| 夜夜嗨av一区二区三区中文字幕| 欧美午夜不卡在线观看免费 | 亚洲日韩欧美一区二区在线| 欧美国产精品久久| 一个色综合导航| 一区二区三区国产在线| 国产精品久久久久久久午夜| 午夜精品久久久久久久久久久久久 | 免费亚洲一区| 男人天堂欧美日韩| 99综合视频| 亚洲午夜在线视频| 韩国三级电影久久久久久| 欧美电影免费观看高清完整版| 欧美激情视频免费观看| 亚洲免费婷婷| 久久久www成人免费无遮挡大片| 亚洲欧洲一区二区三区|