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

蝸牛的家
男兒當自強
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);    //等待服務線程退出
 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)  編輯 收藏 引用 所屬分類: 網絡開發

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(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>
            艳女tv在线观看国产一区| 久久精品亚洲一区二区| 欧美综合国产| 久久久精品国产免大香伊| 欧美一区二区在线看| 午夜精品久久久久久久久久久久 | 久久综合网络一区二区| 久久亚洲精品网站| 亚洲观看高清完整版在线观看| 欧美aⅴ99久久黑人专区| 欧美激情一区二区三区成人| 亚洲精品1区| 亚洲欧美国产另类| 久久久久天天天天| 欧美人在线视频| 国产欧美日韩亚洲| 亚洲成色www8888| 在线一区二区三区四区| 欧美一区影院| 亚洲激情专区| 亚洲欧美电影在线观看| 亚洲伦理中文字幕| 亚洲免费观看高清在线观看 | 国产精品美女久久久| 午夜国产精品影院在线观看 | 麻豆久久精品| 日韩视频免费观看| 午夜视频在线观看一区二区三区 | 一本久久a久久免费精品不卡| 欧美一级淫片aaaaaaa视频| 久久综合给合久久狠狠狠97色69| 亚洲精选一区二区| 久久夜色精品国产亚洲aⅴ| 国产精品第一区| 亚洲精品视频一区二区三区| 久久久久久日产精品| 亚洲欧洲在线一区| 久久精品久久99精品久久| 欧美视频网站| 夜夜精品视频一区二区| 另类亚洲自拍| 午夜视频精品| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲国产中文字幕在线观看| 久久精品视频网| 中文高清一区| 欧美午夜剧场| 亚洲一区二区三区国产| 亚洲精品日韩在线观看| 免费黄网站欧美| 国语自产偷拍精品视频偷| 欧美一区二区三区视频在线观看| 一本久道久久综合中文字幕| 欧美精品 日韩| 亚洲国产精品久久久久秋霞蜜臀| 一本色道久久综合狠狠躁篇怎么玩| 欧美福利视频在线| 91久久精品国产91久久性色| 老司机久久99久久精品播放免费 | 狠狠色伊人亚洲综合网站色| 亚洲国产美女| 欧美成人自拍| 欧美日韩亚洲一区三区| 久久精品综合| 久久久99精品免费观看不卡| 亚洲国产成人在线播放| 亚洲黄色在线视频| 久久综合狠狠综合久久激情| 国产午夜精品一区二区三区欧美 | 亚洲二区在线| 国产精品亚洲а∨天堂免在线| 国产精品萝li| 校园春色国产精品| 久久久久欧美精品| 亚洲欧美日韩国产一区| 卡通动漫国产精品| 亚洲一二三级电影| 国产日韩精品一区二区三区 | 亚洲精品1234| 欧美午夜不卡在线观看免费| 亚洲一区二区三区国产| 欧美在线视频网站| 亚洲国产精品va在看黑人| 亚洲丰满少妇videoshd| 欧美手机在线| 久久久久久久久岛国免费| 久久理论片午夜琪琪电影网| 91久久精品美女| 亚洲影院色无极综合| 激情视频一区二区| 亚洲日本中文字幕| 国产婷婷精品| 亚洲精品一区在线观看| 国产日韩欧美一二三区| 亚洲国产精品传媒在线观看| 欧美主播一区二区三区| 久久深夜福利| 亚洲欧美精品在线| 毛片av中文字幕一区二区| 亚洲特级片在线| 模特精品裸拍一区| aa级大片欧美三级| 久久精品国产亚洲a| 噜噜噜91成人网| 亚洲国产导航| 国产乱码精品一区二区三区忘忧草| 亚洲精品日韩综合观看成人91| 亚洲自拍偷拍色片视频| 国产人成一区二区三区影院| 欧美日本免费| 欧美亚洲在线观看| 久久精品人人做人人爽电影蜜月| 99在线精品观看| 久久九九久久九九| 香蕉久久夜色精品| 欧美激情一区二区三区高清视频| 国产精品国产福利国产秒拍 | 亚洲国产精品va在线看黑人| 亚洲午夜精品网| 99国产精品久久久久久久久久| 性欧美暴力猛交另类hd| 亚洲天堂网站在线观看视频| 猛男gaygay欧美视频| 久久婷婷影院| 国产视频欧美视频| 亚洲天堂久久| 亚洲午夜一级| 欧美日韩中文字幕| 日韩视频不卡中文| 91久久国产综合久久蜜月精品| 欧美在线免费一级片| 欧美一级理论性理论a| 欧美日韩国产综合新一区| 欧美华人在线视频| 亚洲黑丝一区二区| 欧美暴力喷水在线| 欧美激情按摩| 亚洲欧洲日本mm| 免费观看日韩| 亚洲国产精品欧美一二99| 91久久精品视频| 免费在线播放第一区高清av| 久久综合久久美利坚合众国| 久久福利影视| 另类酷文…触手系列精品集v1小说| 国产婷婷精品| 久久国产免费| 欧美激情精品久久久久久变态| 亚洲欧洲精品一区| 亚洲欧美视频一区| 欧美调教视频| 性欧美1819sex性高清| 老司机免费视频一区二区三区| 黄色日韩精品| 欧美黄色aaaa| 亚洲午夜精品久久久久久app| 99精品99| 久久久久这里只有精品| 久久夜色精品国产亚洲aⅴ| 久久躁狠狠躁夜夜爽| 欧美午夜精品久久久久久人妖| 亚洲国产你懂的| 亚洲欧洲综合| 久久精品国产精品亚洲综合| 亚洲国产一区二区三区a毛片| 亚洲精品久久在线| 午夜伦理片一区| 亚洲国产日韩在线一区模特| 国产精品久久久久久久7电影| 免费在线亚洲| 亚洲国产综合91精品麻豆| 欧美日韩一区二区三区在线观看免| 99精品欧美一区二区蜜桃免费| 亚洲深夜福利| 午夜精品久久久久久久99樱桃 | 亚洲一区亚洲二区| 免费试看一区| 午夜在线精品| 在线精品国产欧美| 免费中文字幕日韩欧美| 午夜国产精品视频| 亚洲小说欧美另类社区| 国产日韩综合一区二区性色av| 久久精视频免费在线久久完整在线看| 欧美成人日本| 性欧美1819sex性高清| 尤物99国产成人精品视频| 欧美色另类天堂2015| 久久精品卡一| 亚洲小视频在线观看| 欧美大片免费| 午夜久久久久久| 日韩亚洲一区二区| …久久精品99久久香蕉国产| 国产精品伦理| 欧美日韩在线精品| 欧美xxx在线观看| 老**午夜毛片一区二区三区| 亚洲电影免费在线观看| 国产精品永久免费|