c语言实现简单http服务器

1.源码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>

#define SERVER_PORT 8008
#define MESSAGE "HTTP/1.1 200 OK\r\nContent-Length: 11\r\n\r\nhello world"

int main()
{
    struct sockaddr_in srvaddr;
    int locfd;
    int sockopt = 1;
    int res;

    /*创建一个套接字*/
    locfd = socket(AF_INET, SOCK_STREAM, 0);
    if(locfd < 0)
    {
        printf("create socket error!\n");
        return -1;
    }

    printf("socket ready!\n");

    srvaddr.sin_family = AF_INET;
    srvaddr.sin_port = htons(SERVER_PORT);
    srvaddr.sin_addr.s_addr = htonl(INADDR_ANY);

    setsockopt(locfd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(int));

    /*bind, 将网络地址与端口绑定*/
    res = bind(locfd, (struct sockaddr *)&srvaddr, sizeof(srvaddr));
    if(res < 0)
    {
        printf("bind error!\n");
        close(locfd);
        return -1;
    }

    printf("bind ready!\n");

    /*listen, 监听端口*/
    listen(locfd, 10);

    printf("等待来自客户端的连接......\n");

    while(1)
    {
        struct sockaddr_in cliaddr;
        socklen_t len = sizeof(cliaddr);
        int clifd;

        clifd = accept(locfd, (struct sockaddr *)&cliaddr, &len);
        if(clifd < 0)
        {
            printf("accept error!\n");
            close(locfd);
            return -1;
        }

        /*输出客户机的信息*/
        char *ip = inet_ntoa(cliaddr.sin_addr);

        printf("客户机: %s连接到本服务器成功!\n", ip);

        /*输出客户机请求的信息*/
        char buff[1024] = {0};
        int size = read(clifd, buff, sizeof(buff));

        printf("Request information: ");

        printf("%s\n", buff);

        printf("%d bytes\n", size);

        write(clifd, MESSAGE, strlen(MESSAGE));

        close(clifd);
    }

    close(locfd);

    return 0;
}

2.编译源码

$ gcc -o httpd httpd.c -std=c89

3.运行及其结果

$ ./httpd

在浏览器地址栏输入http://127.0.0.1:8008/即可访问

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在之前几篇Web服务器讲解中,总结了Apache,Nginx和Tomcat的基本知识及他们之间的区别和联系。Ngi...
    Chuck_Hu阅读 7,317评论 0 4
  • 第1章WEB服务器和HTTP协议的由来 我们学会制作简单页面,我们学会简单操作数据MySQL,那么如何让在用户这一...
    折翼自由阅读 5,196评论 0 0
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 11,074评论 3 8
  • ![Flask](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAW...
    极客学院Wiki阅读 12,209评论 0 3
  • 不知不觉易趣客已经在路上走了快一年了,感觉也该让更多朋友认识知道易趣客,所以就谢了这篇简介,已做创业记事。 易趣客...
    Physher阅读 8,955评论 1 2

友情链接更多精彩内容