From 418d33a6dedef5e12bf6c606acabe896a1593551 Mon Sep 17 00:00:00 2001 From: Nazar Date: Mon, 8 Sep 2025 09:41:16 +0300 Subject: [PATCH] Initial commit --- .gitignore | 1 + CMakeLists.txt | 22 ++++++++++++++++++++++ app/main.cpp | 8 ++++++++ src/server.cpp | 34 ++++++++++++++++++++++++++++++++++ src/server.hpp | 25 +++++++++++++++++++++++++ 5 files changed, 90 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 app/main.cpp create mode 100644 src/server.cpp create mode 100644 src/server.hpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..567609b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5dc430e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.15...4.0) + +project(SimpleHttpServer VERSION 1.0 + DESCRIPTION "A simple HTTP server written in C++" + LANGUAGES CXX) + + + +add_library( + httpserverlib + STATIC + src/server.hpp + src/server.cpp +) +target_compile_features(httpserverlib PUBLIC cxx_std_23) + +add_executable( + httpserver + app/main.cpp +) + +target_link_libraries(httpserver PUBLIC httpserverlib) diff --git a/app/main.cpp b/app/main.cpp new file mode 100644 index 0000000..c48624b --- /dev/null +++ b/app/main.cpp @@ -0,0 +1,8 @@ +#include +#include "../src/server.hpp" + +int main() { + SimpleHttpServer server; + server.start_listening(8080); + std::println("Bye!"); +} diff --git a/src/server.cpp b/src/server.cpp new file mode 100644 index 0000000..9e33d95 --- /dev/null +++ b/src/server.cpp @@ -0,0 +1,34 @@ +#include "server.hpp" + +SimpleHttpServer::SimpleHttpServer() { +} + +SimpleHttpServer::~SimpleHttpServer() { +} + +void SimpleHttpServer::start_listening(int port) { + std::println("Starting server on port {0}...", port); + + int serverSocket = socket(AF_INET, SOCK_STREAM, 0); + + sockaddr_in serverAddress; + serverAddress.sin_family = AF_INET; + serverAddress.sin_port = htons(port); + serverAddress.sin_addr.s_addr = INADDR_ANY; + + bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress)); + + listen(serverSocket, 5); + + std::println("Listening..."); + + int clientSocket = accept(serverSocket, nullptr, nullptr); + + char buffer[1024] = {0}; + recv(clientSocket, buffer, sizeof(buffer), 0); + std::println("Received: {0}", buffer); + + std::println("Closing..."); + + close(serverSocket); +} diff --git a/src/server.hpp b/src/server.hpp new file mode 100644 index 0000000..a8be203 --- /dev/null +++ b/src/server.hpp @@ -0,0 +1,25 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class SimpleHttpServer { +public: + SimpleHttpServer(); + SimpleHttpServer(SimpleHttpServer &&) = default; + SimpleHttpServer(const SimpleHttpServer &) = default; + SimpleHttpServer &operator=(SimpleHttpServer &&) = default; + SimpleHttpServer &operator=(const SimpleHttpServer &) = default; + ~SimpleHttpServer(); + + void start_listening(int port); + +private: + +}; +