美文网首页
简易的 http 服务端(C 语言实现)

简易的 http 服务端(C 语言实现)

作者: Jamza | 来源:发表于2021-07-23 12:09 被阅读0次

代码:

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

int startup()
{
    int sock = socket(AF_INET,SOCK_STREAM,0);
    if(sock < 0)
    {   
        exit(1);//退出进程
    }   

    int opt = 1;
    setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));

    struct sockaddr_in local;
    local.sin_family = AF_INET;
    local.sin_addr.s_addr = htonl(INADDR_ANY);
    local.sin_port = htons(8080); // 指定固定端口

    int ret = bind(sock,(struct sockaddr *)&local,sizeof(local));
    if( ret < 0 ) 
    {   
        exit(2);
    }   

    if( listen(sock,5) < 0 ) 
    {   
        exit(3);
    }   
        return sock;
}

#define HTTP_HEAD1 "HTTP/1.1 200 ok"
#define HTTP_HEAD2 "Content-Type:application/json"
#define HTTP_DATA  "{\
    \"AC\":\"default\",\
    \"MAC\":\"xx.xx.xx.xx.xx.xx\",\
    \"IP\":\"192.68.83.105/24\"\
}"


void* handler_request(void * arg)
{
    int sock = (int)arg;
    char buf[4896];
    char echo_buf[4096] = {0};
    ssize_t s = read(sock,buf,sizeof(buf)-1);
    if( s > 0 )
    {
        buf[s] = 0;
        printf(" %s ",buf);
      
        snprintf(echo_buf, 4096, "%s\n%s\nContent-Length:%d\n\n%s\n",
                 HTTP_HEAD1, HTTP_HEAD2, strlen(HTTP_DATA), HTTP_DATA);
      
      
        const char *echo_str = "HTTP/1.1 200 ok\nContent-Type: text/plain\nContent-Length: 10\n\n1234567890\n\n";
        printf("-------------\n");
        printf(" %s ",echo_buf);
        write(sock,echo_buf,strlen(echo_buf));
    }
    close(sock);
}

int main()
{
    int listen_sock = startup();
    while(1)
    {
        struct sockaddr_in client;
        socklen_t len = sizeof(client);
        int sock = accept(listen_sock,(struct sockaddr*)&client,&len);
        if(sock < 0)
        {
            continue;
        }
        pthread_t tid;
        pthread_create(&tid,NULL,handler_request,(void *)sock);
               pthread_detach(tid);
    }
    return 0; 
}


相关文章

  • socket-环信 number two

    实现Socket服务端监听: 1:使用C语言实现 2:使用CocoaAsyncSocket(OC)内部是对C的封装...

  • 2020-05-06

    用c语言实现http请求 用c语言来实现一个简单的http请求,请求 www.cnblogs.com 首页 ···...

  • 15. Python TCP与UDP编程

    建立TCP服务 服务端接受数据的缓冲区 服务端的请求队列 时间戳服务器 用Socket实现简易Http服务器 客户...

  • 实现简易的C语言编译器(part 1)

    从这一部分起,我们将逐步地去实现一个简易C语言编译器。所谓简易,就是会依照C语言的标准,忽略部分的语法,适...

  • 18.http

    Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。 net/http介绍 Go语言内...

  • Go语言内置的net/http

    Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。 net/http介绍Go语言内置...

  • Go语言基础之net/http

    Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。 net/http介绍 Go语言内...

  • 实验报告二 (编程语言分析及其应用)

    实验目的与要求:目的:设计与实现简易编程语言及其分析算法,包括简易tensor编程语言的设计与实现、简易tenso...

  • 服务端生成差分文件(Windows环境下)

    服务端生成差分文件(Windows环境下) 首先,差分算法是用C语言实现的,而服务端应用程序是用Java语言编写的...

  • Leecode swift

    import Foundation /*一般写算法用c语言来实现,比较能理解整个细节,因为高级语言都封装的简易的操...

网友评论

      本文标题:简易的 http 服务端(C 语言实现)

      本文链接:https://www.haomeiwen.com/subject/qvlemltx.html