C++实现简单的HTTP服务器示例代码

分类:知识百科 日期: 点击:0

C++实现简单的HTTP服务器

HTTP服务器是一种用于提供网络服务的应用程序,它的主要作用是处理客户端发来的请求,并返回相应的响应。HTTP服务器由一系列的程序组成,包括HTTP守护进程、HTTP客户端、HTTP服务器、HTTP代理服务器等。

C++语言可以用来实现简单的HTTP服务器,下面是一段C++实现的简单HTTP服务器示例代码:

#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    // 创建socket
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd == -1)
    {
        cout << "create socket failed!" << endl;
        return -1;
    }

    // 绑定端口
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(80);
    addr.sin_addr.s_addr = INADDR_ANY;
    if (bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)) == -1)
    {
        cout << "bind failed!" << endl;
        return -1;
    }

    // 监听端口
    if (listen(sockfd, 10) == -1)
    {
        cout << "listen failed!" << endl;
        return -1;
    }

    // 接受客户端请求
    struct sockaddr_in client_addr;
    socklen_t len = sizeof(client_addr);
    int client_fd = accept(sockfd, (struct sockaddr*)&client_addr, &len);
    if (client_fd == -1)
    {
        cout << "accept failed!" << endl;
        return -1;
    }
    else
    {
        cout << "accept success!" << endl;
    }

    // 读取客户端请求
    char buf[1024];
    int n = read(client_fd, buf, sizeof(buf));
    if (n == -1)
    {
        cout << "read failed!" << endl;
        return -1;
    }
    else
    {
        cout << "read success!" << endl;
    }

    // 解析客户端请求
    string request(buf);
    cout << request << endl;

    // 返回响应
    string response = "HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nHello World";
    if (write(client_fd, response.c_str(), response.size()) == -1)
    {
        cout << "write failed!" << endl;
        return -1;
    }
    else
    {
        cout << "write success!" << endl;
    }

    // 关闭socket
    close(sockfd);
    close(client_fd);

    return 0;
}

以上代码实现了一个简单的HTTP服务器,它能够接受客户端的请求,并返回响应。使用方法是:编译上面的代码,运行编译后的可执行文件,此时HTTP服务器就开始运行了,它会监听本地的80端口,如果有客户端发送请求,服务器就会接受请求,并返回响应。

标签:

版权声明

1. 本站所有素材,仅限学习交流,仅展示部分内容,如需查看完整内容,请下载原文件。
2. 会员在本站下载的所有素材,只拥有使用权,著作权归原作者所有。
3. 所有素材,未经合法授权,请勿用于商业用途,会员不得以任何形式发布、传播、复制、转售该素材,否则一律封号处理。
4. 如果素材损害你的权益请联系客服QQ:77594475 处理。