1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| #include <stdio.h> #include <stdlib.h> #include <string.h> #include <winsock2.h>
#pragma comment(lib, "ws2_32.lib") #pragma warning(disable:4996)
#define PORT 8080 #define BUFFER_SIZE 1024
void handle_request(SOCKET client_socket) { char buffer[BUFFER_SIZE]; int bytes_received = recv(client_socket, buffer, sizeof(buffer) - 1, 0); if (bytes_received > 0) { buffer[bytes_received] = '\0'; printf("Received request:\n%s\n", buffer);
char method[16], path[256], version[16]; sscanf(buffer, "%s %s %s", method, path, version);
const char* response_header; const char* response_body;
if (strcmp(path, "/") == 0) { response_header = "HTTP/1.1 200 OK\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n"; response_body = "Welcome to the home page!"; } else if (strcmp(path, "/hello") == 0) { response_header = "HTTP/1.1 200 OK\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n"; response_body = "Hello, World!"; } else { response_header = "HTTP/1.1 404 Not Found\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n"; response_body = "404 Not Found"; }
send(client_socket, response_header, strlen(response_header), 0); send(client_socket, response_body, strlen(response_body), 0); }
closesocket(client_socket); }
int main() { WSADATA wsaData; SOCKET server_socket, client_socket; struct sockaddr_in server, client; int client_len = sizeof(client);
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("Failed to initialize WinSock. Error Code: %d\n", WSAGetLastError()); return 1; }
server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (server_socket == INVALID_SOCKET) { printf("Could not create socket. Error Code: %d\n", WSAGetLastError()); WSACleanup(); return 1; }
server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(PORT);
if (bind(server_socket, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) { printf("Bind failed. Error Code: %d\n", WSAGetLastError()); closesocket(server_socket); WSACleanup(); return 1; }
listen(server_socket, SOMAXCONN); printf("Server listening on port %d...\n", PORT);
while (1) { client_socket = accept(server_socket, (struct sockaddr*)&client, &client_len); if (client_socket == INVALID_SOCKET) { printf("Accept failed. Error Code: %d\n", WSAGetLastError()); continue; }
handle_request(client_socket); }
closesocket(server_socket); WSACleanup(); return 0; }
|