- •Задание на курсовую работу
- •Оглавление
- •Введение
- •Постановка задачи
- •1. Теоретические основы разрабатываемой системы
- •2. Описание алгоритма работы приложения
- •3. Описание структуры приложения
- •Основная функция клиента:
- •4. Результаты работы приложения
- •Заключение
- •Список использованной литературы
- •Приложение 1 Текст программы «server111.Cpp»
- •Основная функция сервера логирования:
- •Приложение 2 Текст программы «server222.Cpp»
- •Приложение 3 Текст программы «client.Cpp»
- •Приложение 4 Текст программы «log.Cpp»
- •Приложение 5 Текст программы «server1.Cpp»
- •Приложение 6 Текст программы «server2.Cpp»
- •Приложение 7 Текст программы «client.Cpp»
- •Приложение 8 Текст программы «clientOs.Cpp»
Приложение 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;
}
