最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C++制作簡(jiǎn)單的web服務(wù)器

 更新時(shí)間:2015年03月06日 10:50:58   投稿:hebedich  
本文給大家分享的是使用C++簡(jiǎn)單實(shí)現(xiàn)web服務(wù)器的代碼,雖然非常的簡(jiǎn)陋,功能也很少,主要是為了更好的理解WEB服務(wù)器的工作原理,推薦給大家,也希望對(duì)大家能夠有所幫助。

僅僅實(shí)現(xiàn)了web的功能,局限性比較大,由于只是想要理解web服務(wù)器的原理,所以地址和端口是固定的,也不支持多線程,每次訪問的頁面也是一致的,后面自己會(huì)慢慢改進(jìn)這些

復(fù)制代碼 代碼如下:

//*****************************************************************************
//@ProjectName      ZYhttpd
//@Description      my http server
//@Author           NicoleRobin
//@Date             2015/02/09
//*****************************************************************************
#include <cstdio>
#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: %d\r\n\r\n%s\
"
#define HTML "\
<html>\
    <head>\
        <title>ZYhttp</title>\
    <head>\
    <body>\
        <h1>Hello ZYhttp!</h1>\
    </body>\
</html>\
"
#pragma comment(lib, "WS2_32")
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);
        sprintf_s(buffer, HEADER, strlen(HTML), HTML);
        if (send(socketClient, buffer, strlen(buffer), 0) < 0)
        {
            printf("Send data failed!");
            break;
        }
        printf("Send data : \n%s", buffer);
        closesocket(socketClient);
    }
    closesocket(socketServer);
    WSACleanup();
    return 0;
}

演示圖

以上就是本文分享的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • QT 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能

    QT 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能

    本文介紹了如何使用QT技術(shù)實(shí)現(xiàn)一個(gè)具有動(dòng)態(tài)效果的隨機(jī)驗(yàn)證碼系統(tǒng),詳述了CaptchaMovableLabel和CaptchaLabel兩個(gè)自定義類的功能,包括顯示和拖動(dòng)字母、繪制噪音點(diǎn)和線條、以及隨機(jī)生成字母等,講解了如何通過繼承QWidget和QLabel來實(shí)現(xiàn)這些功能,并通過MainWindow創(chuàng)建界面
    2024-10-10
  • C++基礎(chǔ)入門之運(yùn)算符

    C++基礎(chǔ)入門之運(yùn)算符

    下面小編就為大家?guī)硪黄P(guān)于C++運(yùn)算符基礎(chǔ)的文章。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-11-11
  • C++中引用傳遞與指針傳遞的區(qū)別(面試常見)

    C++中引用傳遞與指針傳遞的區(qū)別(面試常見)

    這篇文章主要介紹了C++中引用傳遞與指針傳遞的區(qū)別(面試常見),需要的朋友可以參考下
    2018-03-03
  • GCC 編譯c程序的方法及過程解析

    GCC 編譯c程序的方法及過程解析

    目前 Linux 下最常用的 C 語言編譯器是 GCC ( GNU Compiler Collection ),它是 GNU 項(xiàng)目中符合 ANSI C 標(biāo)準(zhǔn)的編譯系統(tǒng),能夠編譯用 C 、 C++ 和 Object C 等語言編寫的程序
    2014-01-01
  • Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球

    Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球

    這篇文章主要為大家詳細(xì)介紹了Easyx實(shí)現(xiàn)窗口自動(dòng)碰撞的小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    C語言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能示例

    這篇文章主要介紹了C語言用棧和隊(duì)列實(shí)現(xiàn)的回文檢測(cè)功能,結(jié)合具體實(shí)例形式分析了C語言棧和隊(duì)列的定義及使用棧和隊(duì)列進(jìn)行回文檢測(cè)的操作技巧,需要的朋友可以參考下
    2017-06-06
  • 二分法求多項(xiàng)式在-10 10間值的實(shí)現(xiàn)代碼

    二分法求多項(xiàng)式在-10 10間值的實(shí)現(xiàn)代碼

    以下實(shí)例是介紹了二分法求多項(xiàng)式在-10 10間值的實(shí)現(xiàn)代碼。需要的朋友參考下
    2013-05-05
  • 一文詳解Qt的QObject類

    一文詳解Qt的QObject類

    Qt的QObject類是Qt框架中的基類,它是所有Qt對(duì)象的父類,本文主要介紹了Qt的QObject類,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • OpenGL實(shí)現(xiàn)鼠標(biāo)移動(dòng)方塊

    OpenGL實(shí)現(xiàn)鼠標(biāo)移動(dòng)方塊

    這篇文章主要為大家詳細(xì)介紹了OpenGL實(shí)現(xiàn)鼠標(biāo)移動(dòng)方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++函數(shù)中return語句的使用方法

    C++函數(shù)中return語句的使用方法

    C++中的return語句是函數(shù)中一個(gè)重要的語句,return語句用于結(jié)束當(dāng)前正在執(zhí)行的函數(shù),并將控制權(quán)返回給調(diào)用此函數(shù)的函數(shù),需要的朋友可以了解下
    2012-12-12

最新評(píng)論

永昌县| 运城市| 新龙县| 虞城县| 山东省| 德安县| 潢川县| 青川县| 金乡县| 吉水县| 达日县| 尉犁县| 章丘市| 沧州市| 西贡区| 错那县| 桃园县| 昭通市| 化州市| 开原市| 西青区| 连江县| 天等县| 舟山市| 双牌县| 原平市| 增城市| 长岭县| 柳州市| 石林| 旌德县| 格尔木市| 南岸区| 石景山区| 眉山市| 南陵县| 青铜峡市| 余姚市| 阳新县| 洱源县| 霍林郭勒市|