Skip to content

Instantly share code, notes, and snippets.

@hasanisaeed
Created October 22, 2024 08:19
Show Gist options
  • Save hasanisaeed/63b63074afdc5eb1724660c29f906652 to your computer and use it in GitHub Desktop.
Save hasanisaeed/63b63074afdc5eb1724660c29f906652 to your computer and use it in GitHub Desktop.
simple web server
#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