socket http get and response

cooolr 于 2021-10-24 发布

867919068-59463d2665972_fix732.png

get

GET / HTTP/1.1\r\nHost: cooolr.cn\r\n\r\n

body

HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello World

server

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#define PORT 8000

int make_server() {
    // define
    int socket_desc, client_sock;
    struct sockaddr_in server, client;
    int addrlen = sizeof(client);
    int read_size;
    char request[1024] = {'\0'};
    socket_desc = socket(AF_INET, SOCK_STREAM, 0);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons(PORT);
    if ( bind(socket_desc, (struct sockaddr *)&server, addrlen) < 0 ) {
        return 1;
    }
    listen(socket_desc, 1024);
    while ( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&addrlen)) ) {
        while ( (read_size = recv(client_sock, request, sizeof(request), 0)) > 0 ) {
            strcat(request, "\0");
            printf("%s", request);
            char *body = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello World";
            write(client_sock, body, strlen(body));
            break;
        }
        close(client_sock);
    }
    return 0;
}

int main() {
    return make_server();
}