hello-world-cpp/task_5/socket_handler.cpp

74 lines
2.5 KiB
C++
Raw Permalink Normal View History

2025-01-13 04:58:58 +10:00
#include "socket_handler.h"
#include "routes.h"
const int BUFFER_SIZE = 4096;
2025-01-13 23:44:26 +00:00
#ifdef _WIN32
int SocketHandler::working_with_client_windows(SOCKET listen_socket) {
2025-01-13 04:58:58 +10:00
while (1) {
// 6. Принятие входящего соединения
2025-01-14 09:49:18 +10:00
sockaddr_in client_addr;
int client_addr_size = sizeof(client_addr);
SOCKET client_socket = accept(listen_socket, (struct sockaddr*)&client_addr, &client_addr_size);
if (client_socket == INVALID_SOCKET) {
2025-01-13 04:58:58 +10:00
std::cerr << "Accept failed with error: " << WSAGetLastError() << "\n";
continue;
}
std::cout << "Client connected!\n";
// 7. получение данных от юзера
char buffer[BUFFER_SIZE] = {0};
2025-01-14 09:49:18 +10:00
int bytes_received = recv(client_socket, buffer, BUFFER_SIZE, 0);
if (bytes_received > 0) {
std::string request(buffer, bytes_received);
2025-01-13 04:58:58 +10:00
std::cout << "Received request:\n" << request << "\n";
// Обработка запроса
std::string response = RouteHandler::get_response_by_request(request);
std::cout << "Response:\n" << response << "\n\n";
// Отправка ответа
2025-01-14 09:49:18 +10:00
send(client_socket, response.c_str(), response.size(), 0);
2025-01-13 04:58:58 +10:00
}
2025-01-14 09:49:18 +10:00
closesocket(client_socket);
2025-01-13 04:58:58 +10:00
}
return 0;
}
2025-01-13 23:44:26 +00:00
#else
2025-01-13 04:58:58 +10:00
2025-01-13 23:44:26 +00:00
int SocketHandler::working_with_client_unix(int listen_socket) {
while (1) {
// Принятие соединения
2025-01-14 09:49:18 +10:00
sockaddr_in client_addr;
socklen_t client_addr_size = sizeof(client_addr);
int client_socket = accept(listen_socket, (struct sockaddr*)&client_addr, &client_addr_size);
if (client_socket == -1) {
2025-01-13 23:44:26 +00:00
perror("Accept failed");
continue;
}
std::cout << "Client connected.\n";
// Чтение данных
char buffer[BUFFER_SIZE] = {0};
2025-01-14 09:49:18 +10:00
ssize_t bytes_received = read(client_socket, buffer, BUFFER_SIZE);
if (bytes_received > 0) {
std::string request(buffer, bytes_received);
2025-01-13 23:44:26 +00:00
std::cout << "Received request:\n" << request << "\n";
std::string response = RouteHandler::get_response_by_request(request);
std::cout << "Response:\n" << response << "\n\n";
// Отправка ответа
2025-01-14 09:49:18 +10:00
send(client_socket, response.c_str(), response.size(), 0);
2025-01-13 23:44:26 +00:00
}
2025-01-14 09:49:18 +10:00
close(client_socket);
2025-01-13 23:44:26 +00:00
}
2025-01-13 04:58:58 +10:00
}
2025-01-13 23:44:26 +00:00
#endif