socket is up

This commit is contained in:
Ivanov Matvey 2025-01-13 02:35:49 +10:00
parent a522c5cb8f
commit 46df608d79
7 changed files with 137 additions and 0 deletions

11
task_5/CMakeLists.txt Normal file
View File

@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.13)
project(hello-world-cpp-logger)
add_library(socket_up STATIC socket_up.cpp)
add_library(socket_handler STATIC socket_handler.cpp)
add_executable(main main.cpp)
target_link_libraries(main socket_up socket_handler)

36
task_5/main.cpp Normal file
View File

@ -0,0 +1,36 @@
#include "socket_up.h"
#include "socket_handler.h"
#include <iostream>
int main() {
SOCKET listenSocket = SocketUp::config_socket_windows();
// 6. Принятие входящего соединения
sockaddr_in clientAddr;
int clientAddrSize = sizeof(clientAddr);
SOCKET clientSocket = accept(listenSocket, (struct sockaddr*)&clientAddr, &clientAddrSize);
if (clientSocket == INVALID_SOCKET) {
std::cerr << "Accept failed with error: " << WSAGetLastError() << "\n";
closesocket(listenSocket);
WSACleanup();
return 1;
}
std::cout << "Client connected!\n";
// 7. Отправка данных клиенту
const char* message = "new message from server!\n";
int bytesSent = send(clientSocket, message, strlen(message), 0);
if (bytesSent == SOCKET_ERROR) {
std::cerr << "Send failed with error: " << WSAGetLastError() << "\n";
closesocket(clientSocket);
closesocket(listenSocket);
WSACleanup();
return 1;
}
std::cout << "Message sent to client.\n";
return 0;
}

3
task_5/readme.md Normal file
View File

@ -0,0 +1,3 @@
# Here need to use flag -lws2_32
And I decide to make launch though ``make``

View File

0
task_5/socket_handler.h Normal file
View File

63
task_5/socket_up.cpp Normal file
View File

@ -0,0 +1,63 @@
#include "socket_up.h"
// // Линковка библиотеки Winsock
// #pragma comment(lib, "ws2_32.lib")
// don't need but I think may shoot
SOCKET SocketUp::config_socket_windows() {
// 1. Инициализация Winsock
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
std::cerr << "WSAStartup failed with error: " << WSAGetLastError() << "\n";
return 1;
}
// 2. Создание сокета
SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0);
if (listenSocket == INVALID_SOCKET) {
std::cerr << "Socket creation failed with error: " << WSAGetLastError() << "\n";
WSACleanup();
return 1;
}
// 3. Настройка адреса сокета
sockaddr_in serverAddr;
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8080); // Порт для привязки
serverAddr.sin_addr.s_addr = INADDR_ANY; // Привязка к любому интерфейсу
// 4. Привязка сокета к адресу
if (bind(listenSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
std::cerr << "Bind failed with error: " << WSAGetLastError() << "\n";
closesocket(listenSocket);
WSACleanup();
return 1;
}
// 5. Перевод сокета в режим прослушивания
if (listen(listenSocket, SOMAXCONN) == SOCKET_ERROR) {
std::cerr << "Listen failed with error: " << WSAGetLastError() << "\n";
closesocket(listenSocket);
WSACleanup();
return 1;
}
std::cout << "Server is listening on port 8080...\n";
return listenSocket;
// // 8. Закрытие клиентского сокета
// closesocket(clientSocket);
// // 9. Закрытие серверного сокета и завершение Winsock
// closesocket(listenSocket);
// WSACleanup();
// std::cout << "Server shut down.\n";
return 0;
}

24
task_5/socket_up.h Normal file
View File

@ -0,0 +1,24 @@
#ifdef _WIN32
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <cstring>
#else
#include <sys/socket.h>
#endif
#include <iostream>
class SocketUp {
public:
#ifdef _WIN32
static SOCKET config_socket_windows();
#else
// SOCKET?
static SOCKET config_socket_unix();
#endif
};