hello-world-cpp/task_5/socket_handler.cpp

74 lines
2.5 KiB
C++
Raw 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. Принятие входящего соединения
sockaddr_in clientAddr;
int clientAddrSize = sizeof(clientAddr);
2025-01-13 23:44:26 +00:00
SOCKET clientSocket = accept(listen_socket, (struct sockaddr*)&clientAddr, &clientAddrSize);
2025-01-13 04:58:58 +10:00
if (clientSocket == INVALID_SOCKET) {
std::cerr << "Accept failed with error: " << WSAGetLastError() << "\n";
continue;
}
std::cout << "Client connected!\n";
// 7. получение данных от юзера
char buffer[BUFFER_SIZE] = {0};
int bytesReceived = recv(clientSocket, buffer, BUFFER_SIZE, 0);
if (bytesReceived > 0) {
std::string request(buffer, bytesReceived);
std::cout << "Received request:\n" << request << "\n";
// Обработка запроса
std::string response = RouteHandler::get_response_by_request(request);
std::cout << "Response:\n" << response << "\n\n";
// Отправка ответа
send(clientSocket, response.c_str(), response.size(), 0);
}
closesocket(clientSocket);
}
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) {
// Принятие соединения
sockaddr_in clientAddr;
socklen_t clientAddrSize = sizeof(clientAddr);
int clientSocket = accept(listen_socket, (struct sockaddr*)&clientAddr, &clientAddrSize);
if (clientSocket == -1) {
perror("Accept failed");
continue;
}
std::cout << "Client connected.\n";
// Чтение данных
char buffer[BUFFER_SIZE] = {0};
ssize_t bytesReceived = read(clientSocket, buffer, BUFFER_SIZE);
if (bytesReceived > 0) {
std::string request(buffer, bytesReceived);
std::cout << "Received request:\n" << request << "\n";
std::string response = RouteHandler::get_response_by_request(request);
std::cout << "Response:\n" << response << "\n\n";
// Отправка ответа
send(clientSocket, response.c_str(), response.size(), 0);
}
close(clientSocket);
}
2025-01-13 04:58:58 +10:00
}
2025-01-13 23:44:26 +00:00
#endif