亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

使用C++制作簡單的web服務器(續)

2020-01-26 15:09:54
字體:
來源:轉載
供稿:網友

增加功能:
1、從文件中讀取網頁并返回給客戶端,而不是把網頁代碼寫死在代碼中。
局限:
1、還不能根據URL地址中的參數,訪問指定頁面
2、仍然是單線程

復制代碼 代碼如下:

//*****************************************************************************
//@ProjectName      ZYhttpd
//@Description      my http server
//@Author           NicoleRobin
//@Date             2015/02/09
//*****************************************************************************
#include <cstdio>
#include <string>
#include <fstream>
#include <WinSock2.h>
using namespace std;
#define BUFFER_SIZE 1024
#define HOST "127.0.0.1"
#define PORT 81
#define HEADER "/
HTTP/1.1 200 OK/r/n/
Content-Type: text/html; charset=UTF-8/r/n/
Server: ZYhttp_v1.0.1/r/n/
Content-Length: %ld/r/n/r/n/
"
const string strPath = "index.html";
#pragma comment(lib, "WS2_32")
// get file size
long GetFileLength(string strPath);
// thread function
int main(int argc, char **argv)
{
    // define and init an server sockaddr
    sockaddr_in addrServer;
    addrServer.sin_family = AF_INET;
    addrServer.sin_addr.S_un.S_addr = INADDR_ANY;
    addrServer.sin_port = htons(PORT);
    // init socket dll
    WSADATA wsaData;
    WORD socketVersion = MAKEWORD(2, 0);
    if (WSAStartup(socketVersion, &wsaData) != 0)
    {
        printf("Init socket dll error!");
        exit(1);
    }
    // create socket
    SOCKET socketServer = socket(AF_INET, SOCK_STREAM, 0);
    if (SOCKET_ERROR == socketServer)
    {
        printf("Create socket error!");
        exit(1);
    }
    // bind server socket host
    if (SOCKET_ERROR == bind(socketServer, (LPSOCKADDR)&addrServer, sizeof(addrServer)))
    {
        printf("Bind server host failed!");
        exit(1);
    }
    // listen
    if (SOCKET_ERROR == listen(socketServer, 10))
    {
        printf("Listen failed!");
        exit(1);
    }
    while (true)
    {
        printf("Listening ... /n");
        sockaddr_in addrClient;
        int nClientAddrLen = sizeof(addrClient);
        SOCKET socketClient = accept(socketServer, (sockaddr*)&addrClient, &nClientAddrLen);
        if (SOCKET_ERROR == socketClient)
        {
            printf("Accept failed!");
            break;
        }
        char buffer[BUFFER_SIZE];
        memset(buffer, 0, BUFFER_SIZE);
        if (recv(socketClient, buffer, BUFFER_SIZE, 0) < 0)
        {
            printf("Recvive data failed!");
            break;
        }
        printf("Recv data : /n%s", buffer);
        /*
        // response
        memset(buffer, 0, BUFFER_SIZE);
        ifstream fin(strPath.c_str(), ios::in | ios::binary);
        if (fin.is_open())
        {
            char szTmp[512] = "";
            fin.read(szTmp, 511);
            sprintf_s(buffer, HEADER, GetFileLength(strPath), szTmp);
            if (send(socketClient, buffer, strlen(buffer), 0) < 0)
            {
                printf("Send data failed!");
                break;
            }
        }
        fin.close();
        */
        // response
        // send header
        memset(buffer, 0, BUFFER_SIZE);
        sprintf_s(buffer, HEADER, GetFileLength(strPath));
        if (send(socketClient, buffer, strlen(buffer), 0) < 0)
        {
            printf("Send data failed!");
            break;
        }
        ifstream fin(strPath.c_str(), ios::in | ios::binary);
        if (fin.is_open())
        {
            memset(buffer, 0, BUFFER_SIZE);
            while (fin.read(buffer, BUFFER_SIZE - 1))
            {
                if (send(socketClient, buffer, strlen(buffer), 0) < 0)
                {
                    printf("Send data failed!");
                    break;
                }
                memset(buffer, 0, BUFFER_SIZE);
            }
            if (send(socketClient, buffer, strlen(buffer), 0) < 0)
            {
                printf("Send data failed!");
                break;
            }
        }
        fin.close();
        closesocket(socketClient);
    }
    closesocket(socketServer);
    WSACleanup();
    return 0;
}
long GetFileLength(string strPath)
{
    ifstream fin(strPath.c_str(), ios::in | ios::binary);
    fin.seekg(0, ios_base::end);
    streampos pos = fin.tellg();
    long lSize = static_cast<long>(pos);
    fin.close();
    return lSize;
    /*
    long lSize = 0;
    ifstream fin(strPath.c_str(), ios::in | ios::binary);
    char szBuf[1024*1000] = "";
    while (fin.read(szBuf, 1024 * 1000 - 1))
    {
        lSize += strlen(szBuf);
        memset(szBuf, 0, 1024*1000);
    }
    fin.close();
    lSize += strlen(szBuf);
    return lSize;
    */
}

演示圖

以上所述就是本文對于使用C++實現簡單web服務器的全部代碼了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区av在线| 免费99精品国产自在在线| 一区二区三区美女xx视频| www国产精品视频| 日韩久久午夜影院| 456国产精品| 日韩电影大全免费观看2023年上| 成人乱色短篇合集| 亚洲奶大毛多的老太婆| 久久久视频在线| 国产欧美久久一区二区| 亚洲国产另类久久精品| 久久精品视频免费播放| 日本欧美国产在线| 亚洲91精品在线观看| 欧美老女人在线视频| 91av在线精品| 亚洲视频专区在线| 午夜精品久久久久久久男人的天堂| 久久99精品国产99久久6尤物| 欧美性生活大片免费观看网址| 日韩免费高清在线观看| 一区二区三区美女xx视频| 久久九九有精品国产23| 国产精品亚洲一区二区三区| 欧美专区在线播放| 久久精品视频一| 久久精品视频在线播放| 欧美二区乱c黑人| 高跟丝袜一区二区三区| 久久影视免费观看| 亚洲欧美国产精品va在线观看| 日韩欧美aⅴ综合网站发布| 九九热r在线视频精品| 91日本在线视频| 一个色综合导航| 欧美黄色成人网| 97精品国产aⅴ7777| 欧美电影在线观看| 色噜噜狠狠色综合网图区| 日韩av在线免费| 久久精品国产2020观看福利| 国产在线视频2019最新视频| 久热精品视频在线观看一区| 欧美成人精品一区二区| …久久精品99久久香蕉国产| 亚洲成年网站在线观看| 91精品国产综合久久香蕉922| 日韩视频在线免费| 欧美视频中文在线看| 亚洲丁香久久久| 欧美性资源免费| 97精品久久久| 精品国产欧美一区二区五十路| 日韩在线www| 国产精品私拍pans大尺度在线| 91在线观看免费高清完整版在线观看| 日韩国产欧美精品一区二区三区| 色噜噜久久综合伊人一本| 成人疯狂猛交xxx| 51视频国产精品一区二区| 欧美中文在线观看| 91午夜理伦私人影院| 亚洲最大的成人网| 视频在线观看99| 欧美日韩一区二区在线| 国产精品久久久久福利| 欧美日韩在线免费| 97精品伊人久久久大香线蕉| 久久久精品影院| 久久精品成人动漫| 在线观看日韩欧美| 亚洲国产精品99| 国产精品色视频| 国产一区二区三区四区福利| 成人美女av在线直播| 欧美体内谢she精2性欧美| 欧美做爰性生交视频| 欧美在线视频一区二区| 欧美有码在线观看| 亚洲精品影视在线观看| 久久精品99无色码中文字幕| 国产成人精品综合| 欧美国产亚洲视频| 欧美xxxx18性欧美| 主播福利视频一区| 日韩av影视综合网| 热99精品只有里视频精品| 欧美视频在线观看免费网址| 97av视频在线| 日韩在线欧美在线国产在线| 超碰97人人做人人爱少妇| 人九九综合九九宗合| 欧美成人亚洲成人日韩成人| 国产91|九色| 欧美丝袜一区二区三区| 欧美精品成人91久久久久久久| 911国产网站尤物在线观看| 九九九热精品免费视频观看网站| 97久久久久久| 国产精品xxxxx| 国产免费一区二区三区在线观看| 亚洲欧美国产一区二区三区| 美女精品视频一区| 福利精品视频在线| 国产精品嫩草影院一区二区| 精品视频中文字幕| 美女啪啪无遮挡免费久久网站| 亚洲国产另类久久精品| 欧美国产日韩在线| 国产精品网站大全| 国产九九精品视频| 自拍亚洲一区欧美另类| 96精品久久久久中文字幕| 在线日韩第一页| 国产视频久久网| 欧美xxxx14xxxxx性爽| 中文字幕久久久| 色噜噜国产精品视频一区二区| 久久夜色精品国产亚洲aⅴ| 久国内精品在线| 国产一区二区三区在线视频| 亚洲男人天堂久| 精品国产一区av| 亚洲xxxx3d| 精品一区二区三区四区在线| 欧美黑人极品猛少妇色xxxxx| 亚洲精品99久久久久中文字幕| 国产成人在线一区二区| 成人免费视频在线观看超级碰| 亚洲国产成人av在线| 亚州精品天堂中文字幕| 黄网动漫久久久| 91系列在线观看| 懂色aⅴ精品一区二区三区蜜月| 亚洲黄页视频免费观看| 日韩一区二区三区xxxx| 一区二区三区精品99久久| 国产精品久久久久免费a∨大胸| 亚洲成人免费在线视频| 亚洲精品动漫久久久久| 午夜精品蜜臀一区二区三区免费| 最近2019年手机中文字幕| 91精品国产91久久久久久最新| 亚洲国产精品va在线| 久久久久久com| 国产精品88a∨| 欧美性猛交xxxx久久久| 久久99热精品| 亚洲精品国精品久久99热| 精品国产鲁一鲁一区二区张丽| 久久人人爽人人爽爽久久| 92版电视剧仙鹤神针在线观看| 欧美大片网站在线观看| 日本午夜在线亚洲.国产| 91久久精品美女| 亚洲欧美激情一区| 国产成人精品日本亚洲专区61| 亚洲一区中文字幕| 欧美激情一区二区三区成人| 色多多国产成人永久免费网站| 久久精品久久久久久| 国产一区二区三区18| 亚洲欧美日韩中文在线|