/
AirLexa
/
06
Обзор
Документация
Войти
/
AirLexa
/
06
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lesson_05/server.cpp
88 строк
3 KB
AirLexa
Урок 5
21 июн 2026, 18:12
Верифицирован
21 июн 2026, 18:12
969158e
Код
Авторство
О чём код?
#include <iostream> #include <string> #include <thread> #include <winsock2.h> #include <ws2tcpip.h> #pragma comment(lib, "Ws2_32.lib") void handleClient(SOCKET clientSocket) { char recvBuffer[512]; int bytesReceived = recv(clientSocket, recvBuffer, sizeof(recvBuffer) - 1, 0); if (bytesReceived > 0) { recvBuffer[bytesReceived] = '\0'; std::cout << "[Server - Thread " << std::this_thread::get_id() << "] Received: " << recvBuffer << std::endl; std::string response = "Message successfully processed by server."; int bytesSent = send(clientSocket, response.c_str(), static_cast<int>(response.length()), 0); if (bytesSent == SOCKET_ERROR) { std::cerr << "[Server] Send failed with error: " << WSAGetLastError() << std::endl; } } else if (bytesReceived == 0) { std::cout << "[Server] Client closed connection." << std::endl; } else { std::cerr << "[Server] Recv failed with error: " << WSAGetLastError() << std::endl; } closesocket(clientSocket); std::cout << "[Server - Thread " << std::this_thread::get_id() << "] Connection closed." << std::endl; } int main() { WSADATA wsaData; int result = WSAStartup(MAKEWORD(2, 2), &wsaData); if (result != 0) { std::cerr << "WSAStartup failed with error: " << result << std::endl; return 1; } SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (listenSocket == INVALID_SOCKET) { std::cerr << "Socket creation failed with error: " << WSAGetLastError() << std::endl; WSACleanup(); return 1; } sockaddr_in serverService; serverService.sin_family = AF_INET; serverService.sin_addr.s_addr = INADDR_ANY; serverService.sin_port = htons(54000); result = bind(listenSocket, (SOCKADDR*)&serverService, sizeof(serverService)); if (result == SOCKET_ERROR) { std::cerr << "Bind failed with error: " << WSAGetLastError() << std::endl; closesocket(listenSocket); WSACleanup(); return 1; } result = listen(listenSocket, SOMAXCONN); if (result == SOCKET_ERROR) { std::cerr << "Listen failed with error: " << WSAGetLastError() << std::endl; closesocket(listenSocket); WSACleanup(); return 1; } std::cout << "[Server] Waiting for connections on port 54000..." << std::endl; while (true) { SOCKET clientSocket = accept(listenSocket, nullptr, nullptr); if (clientSocket == INVALID_SOCKET) { std::cerr << "[Server] Accept failed with error: " << WSAGetLastError() << std::endl; continue; } std::cout << "[Server] New client connected. Spawning thread..." << std::endl; std::thread clientThread(handleClient, clientSocket); clientThread.detach(); } closesocket(listenSocket); WSACleanup(); return 0; }