Created
October 22, 2024 08:19
-
-
Save hasanisaeed/63b63074afdc5eb1724660c29f906652 to your computer and use it in GitHub Desktop.
simple web server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdlib.h> | |
#include <stdio.h> | |
#include <WinSock2.h> | |
// 1: | |
void init_sock() | |
{ | |
WSADATA wsaData; | |
WSAStartup(MAKEWORD(2, 2), &wsaData); | |
} | |
// 2: | |
SOCKET create_listen_socket(const char *ip, int port) | |
{ | |
SOCKET listen_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | |
struct sockaddr_in socket_address; | |
socket_address.sin_family = AF_INET; | |
socket_address.sin_addr.s_addr = inet_addr(ip); | |
socket_address.sin_port = htons(port); | |
bind(listen_socket, (SOCKADDR *)&socket_address, sizeof(socket_address)); | |
listen(listen_socket, SOMAXCONN); | |
printf(">> Server is running on %s:%d\n", ip, port); | |
return listen_socket; | |
} | |
void handle_client(SOCKET client_socket) | |
{ | |
char buf[4096]; | |
int buflen = 4096; | |
int result = recv(client_socket, buf, buflen, 0); | |
if (result > 0) | |
{ | |
char method[15], uri[255], version[16]; | |
sscanf(buf, "%s %s %s", method, uri, version); | |
printf("Method: %s\n", method); | |
printf("URL: %s\n", uri); | |
printf("Version: %s\n", version); | |
if (strcmp(uri, "/") == 0) | |
{ | |
char *message = "HTTP/1.1 200 Ok \r\n" | |
"Content-Type: text/html\r\n" | |
"\r\n" | |
"<html><body><h1> Hi </h1></body></html>"; | |
printf("message: %s\n", message); | |
send(client_socket, message, strlen(message), 0); | |
} | |
} | |
} | |
// 3: | |
void accept_clients(SOCKET listen_socket) | |
{ | |
SOCKET client_socket; | |
while (1) | |
{ | |
client_socket = accept(listen_socket, NULL, NULL); | |
handle_client(client_socket); | |
shutdown(client_socket, SD_SEND); | |
closesocket(client_socket); | |
} | |
} | |
int main() | |
{ | |
// 1) | |
init_sock(); | |
// 2) set socket | |
SOCKET listen_socket = create_listen_socket("127.0.0.1", 8000); | |
// 3) listen for clients | |
accept_clients(listen_socket); | |
// 4) | |
closesocket(listen_socket); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment