Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа.docx
Скачиваний:
0
Добавлен:
02.08.2026
Размер:
691 Кб
Скачать

Приложение 5 Текст программы «server1.Cpp»

#include <iostream>

#include <winsock2.h>

#include <ws2tcpip.h>

#include <string>

#include <thread>

#include <windows.h>

#include <sstream>

#include <vector>

#pragma comment(lib, "Ws2_32.lib")

std::string getCurrentTime() {

SYSTEMTIME st;

GetLocalTime(&st);

char buffer[80];

snprintf(buffer, sizeof(buffer), "%04d-%02d-%02d %02d:%02d:%02d",

st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);

return std::string(buffer);

}

std::vector<std::string> getDiskInfo() {

std::vector<std::string> diskInfo;

DWORD drives = GetLogicalDrives();

for (char drive = 'A'; drive <= 'Z'; ++drive) {

if (drives & (1 << (drive - 'A'))) {

std::string driveLetter = std::string(1, drive) + ":\\";

char fileSystemName[MAX_PATH];

DWORD maxComponentLength;

DWORD fileSystemFlags;

if (GetVolumeInformationA(driveLetter.c_str(), nullptr, 0, nullptr, &maxComponentLength, &fileSystemFlags, fileSystemName, sizeof(fileSystemName))) {

diskInfo.push_back(driveLetter + " - File System: " + fileSystemName);

}

}

}

return diskInfo;

}

void handleClient(SOCKET clientSocket) {

SYSTEM_INFO sysInfo;

GetSystemInfo(&sysInfo);

DWORD numProcessors = sysInfo.dwNumberOfProcessors;

std::ostringstream response;

response << "Number of logical processors: " << numProcessors << "\n";

// Get disk information

std::vector<std::string> diskInfo = getDiskInfo();

response << "Number of hard drives: " << diskInfo.size() << "\n";

for (const auto& info : diskInfo) {

response << info << "\n";

}

// Add current time at the end of the response

response << "Current time: " << getCurrentTime() << "\n";

send(clientSocket, response.str().c_str(), response.str().size(), 0);

closesocket(clientSocket);

}

int main() {

WSADATA wsaData;

WSAStartup(MAKEWORD(2, 2), &wsaData);

SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);

if (serverSocket == INVALID_SOCKET) {

std::cerr << "Error creating socket" << std::endl;

WSACleanup();

return 1;

}

sockaddr_in serverAddress = {};

serverAddress.sin_family = AF_INET;

serverAddress.sin_addr.s_addr = INADDR_ANY;

serverAddress.sin_port = htons(8081);

if (bind(serverSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {

std::cerr << "Error binding socket" << std::endl;

closesocket(serverSocket);

WSACleanup();

return 1;

}

listen(serverSocket, 5);

std::cout << "Server is waiting for connections on port 8081..." << std::endl;

while (true) {

SOCKET clientSocket = accept(serverSocket, nullptr, nullptr);

if (clientSocket == INVALID_SOCKET) {

std::cerr << "Error accepting connection" << std::endl;

continue;

}

std::thread clientThread(handleClient, clientSocket);

clientThread.detach();

}

closesocket(serverSocket);

WSACleanup();

return 0;

}