当前位置: 首页 > 编程笔记 >

使用C++制作简单的web服务器

林冥夜
2023-03-14
本文向大家介绍使用C++制作简单的web服务器,包括了使用C++制作简单的web服务器的使用技巧和注意事项,需要的朋友参考一下

仅仅实现了web的功能,局限性比较大,由于只是想要理解web服务器的原理,所以地址和端口是固定的,也不支持多线程,每次访问的页面也是一致的,后面自己会慢慢改进这些


//*****************************************************************************

//@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;

}

演示图

以上就是本文分享的全部内容了,希望大家能够喜欢。

 类似资料:
  • 本文向大家介绍使用C++制作简单的web服务器(续),包括了使用C++制作简单的web服务器(续)的使用技巧和注意事项,需要的朋友参考一下 增加功能: 1、从文件中读取网页并返回给客户端,而不是把网页代码写死在代码中。 局限: 1、还不能根据URL地址中的参数,访问指定页面 2、仍然是单线程 演示图 以上所述就是本文对于使用C++实现简单web服务器的全部代码了,希望大家能够喜欢。

  • 问题内容: 有谁知道将Java方法发布为Web服务的非常简单的方法?我真的不想要使用Tomcat或Jetty或任何其他容器框架的开销。 方案:我想从本地LAN上的其他计算机访问服务类型应用程序中的一组Java方法。 问题答案: 好吧,Tomcat或Jetty对于将某些方法发布为Web服务可能是过大的。但是另一方面,它并不太复杂,他们可以完成工作,那么为什么不呢? 不久前我遇到了类似的问题,并将To

  • 主要内容:Web服务器的工作方式,搭建一个简单的 Web 服务器Go语言里面提供了一个完善的 net/http 包,通过 net/http 包我们可以很方便的搭建一个可以运行的 Web 服务器。同时使用 net/http 包能很简单地对 Web 的路由,静态文件,模版,cookie 等数据进行设置和操作。 Web服务器的工作方式 我们平时浏览网页的时候,会打开浏览器,然后输入网址后就可以显示出想要浏览的内容。这个看似简单的过程背后却隐藏了非常复杂的操作。 对于

  • 问题内容: 我试图在我的机器上运行一个简单的“ Hello World” RESTful Web服务。我使用Eclipse Kepler和GlassFish 4.0。我能够部署该服务,并且可以在GlassFish的管理页面上看到该服务,但是当我尝试访问该服务时,出现以下错误:“ HTTP状态404-找不到”。 以下是简单服务的代码: 为了访问该服务,我尝试以下URL:,其中Eclipse项目的名称

  • Http是一个比tcp更高级的协议,它描述了客户端浏览器如何与网页服务器进行通信。Go有自己的net/http包,我们来看看它。我们从一些简单的示例开始, 首先编写一个“Hello world!”:查看示例15.6 我们引入了http包并启动了网页服务器,和15.1的net.Listen("tcp", "localhost:50000")函数的tcp服务器是类似的,使用http.ListenAnd

  • 本文向大家介绍简单实现Java web服务器,包括了简单实现Java web服务器的使用技巧和注意事项,需要的朋友参考一下 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现; 一、程序执行步骤  1.创建一个ServerSocket对象;  2.调用ServerSocket对象的accept方法,等待连接,连接成功会