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

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

#include <iostream>

#include <winsock2.h>

#include <ws2tcpip.h>

#include <string>

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

int main() {

WSADATA wsaData;

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

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

if (sock == INVALID_SOCKET) {

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

WSACleanup();

return 1;

}

sockaddr_in serverAddress = {};

serverAddress.sin_family = AF_INET;

const char* serverIP = "127.0.0.1";

int serverPort;

int serverChoice;

std::cout << "Choose a server to connect to:\n1. First server (port 8081)\n2. Second server (port 8082)\n";

std::cin >> serverChoice;

if (serverChoice == 1) {

serverPort = 8081;

}

else if (serverChoice == 2) {

serverPort = 8082;

}

else {

std::cerr << "Invalid choice. Exiting program." << std::endl;

closesocket(sock);

WSACleanup();

return 1;

}

serverAddress.sin_port = htons(serverPort);

inet_pton(AF_INET, serverIP, &serverAddress.sin_addr);

if (connect(sock, (sockaddr*)&serverAddress, sizeof(serverAddress)) == SOCKET_ERROR) {

std::cerr << "Error connecting to server" << std::endl;

closesocket(sock);

WSACleanup();

return 1;

}

std::string unit;

if (serverChoice == 2) {

std::cout << "Enter the unit of measurement (bytes, mb, gb): ";

std::cin >> unit;

send(sock, unit.c_str(), unit.size(), 0);

}

char buffer[1024];

int bytesReceived = recv(sock, buffer, sizeof(buffer) - 1, 0);

if (bytesReceived > 0) {

buffer[bytesReceived] = '\0';

std::cout << "Response from server:\n" << buffer << std::endl;

}

else {

std::cerr << "Error receiving data from server" << std::endl;

}

closesocket(sock);

WSACleanup();

return 0;

}

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

#include <iostream>

#include <winsock2.h>

#include <ws2tcpip.h> // For inet_pton

#include <string>

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

void connectToServer(const std::string& serverIp, int port, const std::string& message = "") {

WSADATA wsaData;

SOCKET clientSocket;

sockaddr_in serverAddress;

// Initialize Winsock

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {

std::cerr << "Error initializing Winsock." << std::endl;

return;

}

// Create a socket

clientSocket = socket(AF_INET, SOCK_STREAM, 0);

if (clientSocket == INVALID_SOCKET) {

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

WSACleanup();

return;

}

// Set up the server address

serverAddress.sin_family = AF_INET;

serverAddress.sin_port = htons(port);

// Use inet_pton to convert the IP address

if (inet_pton(AF_INET, serverIp.c_str(), &serverAddress.sin_addr) <= 0) {

std::cerr << "Error converting IP address." << std::endl;

closesocket(clientSocket);

WSACleanup();

return;

}

// Connect to the server

if (connect(clientSocket, (sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {

std::cerr << "Error connecting to server." << std::endl;

closesocket(clientSocket);

WSACleanup();

return;

}

std::cout << "Successfully connected to the server on port " << port << "." << std::endl;

// Send a message (if required)

if (!message.empty()) {

send(clientSocket, message.c_str(), message.size(), 0);

}

// Receive a response from the server

char buffer[1024] = { 0 };

int bytesReceived = recv(clientSocket, buffer, sizeof(buffer) - 1, 0);

if (bytesReceived > 0) {

buffer[bytesReceived] = '\0';

std::cout << "Response from server:\n" << buffer << std::endl;

}

else {

std::cerr << "Error receiving data from server." << std::endl;

}

// Close the socket

closesocket(clientSocket);

WSACleanup();

}

int main() {

std::string serverIp = "192.168.68.110"; // IP address of the virtual machine

int choice;

std::cout << "Select a server to connect to:\n";

std::cout << "1. Server 1 (information about processors and disks)\n";

std::cout << "2. Server 2 (information about memory)\n";

std::cout << "Your choice: ";

std::cin >> choice;

if (choice == 1) {

connectToServer(serverIp, 8081);

}

else if (choice == 2) {

std::string unit;

std::cout << "Enter the memory unit (bytes, mb, gb): ";

std::cin >> unit;

connectToServer(serverIp, 8082, unit);

}

else {

std::cerr << "Invalid choice." << std::endl;

}

return 0;

}