Главная страница

Отчет по лабораторной работе Создание последовательного сервера с установлением логического соединения тср


Скачать 75.72 Kb.
НазваниеОтчет по лабораторной работе Создание последовательного сервера с установлением логического соединения тср
Дата06.10.2021
Размер75.72 Kb.
Формат файлаdocx
Имя файлаKS1_otchet.docx
ТипОтчет
#242536

Министерство образования Республики Беларусь
Учреждение образования

БелорусскиЙ государственный университет

информатики и радиоэлектроники
Факультет информационных технологий и управления
Кафедра вычислительных методов и программирования


ОТЧЕТ

по лабораторной работе
«Создание последовательного сервера с установлением логического соединения ТСР»


Студент гр. 024401




З.А. Серый

Проверил




А.А. Бутов
























































Минск 2021

Условие


Разработать приложение, реализующее архитектуру «клиент-сервер». Необходимо реализовать последовательный сервер с установлением логического соединения (TCP). Логику взаимодействия клиента и сервера реализовать следующим образом: клиент посылает серверу произвольные числа и получает назад количество чисел, кратных трем.

Листинг сервера


#define _CRT_SECURE_NO_WARNINGS

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

#include

#include

#include

#include

using namespace std;
int main()

{

cout << "\tServer:\n";

WORD wVersionRequested;

WSADATA wsadata;

wVersionRequested = MAKEWORD(2, 2);

WSAStartup(wVersionRequested, &wsadata);

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

cout << "Socket is created\n";

sockaddr_in local;

local.sin_family = AF_INET;

local.sin_port = htons(1280);

local.sin_addr.s_addr = htonl(INADDR_ANY);

bind(s, (sockaddr*)&local, sizeof(local));

int r = listen(s, 5);

cout << "Server is waiting for request from client\n";

int n;

sockaddr_in remote_addr;

int size = sizeof(remote_addr);

SOCKET s2 = accept(s, (sockaddr*)&remote_addr, &size);

cout << "Client is connected to the server\n";

recv(s2, (char*)&n, sizeof(int), 0);

cout << "Data is received\n";

int* b = new int[n];

int j = 0;

for (int i = 0; i < n; i++)

{

recv(s2, (char*)&b[i], sizeof(int), 0);

if (b[i] % 3 == 0) j++;

}

cout << "Data is received\n";

send(s2, (char*)&j, sizeof(j), 0);

cout << "Data is sent\n";

closesocket(s2);

cout << "Client is disconnected from the server\n";

WSACleanup();

cout << "Work is complited";

}



Листинг клиента


#define _CRT_SECURE_NO_WARNINGS

#define _WINSOCK_DEPRECATED_NO_WARNINGS

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

#include

#include

#include

using namespace std;
int main()

{

cout << "\tClient:\n";

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD(2, 2);

WSAStartup(wVersionRequested, &wsaData);

sockaddr_in peer;

peer.sin_family = AF_INET;

peer.sin_port = htons(1280);

peer.sin_addr.s_addr = inet_addr("127.0.0.1");

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

cout << "Socket is created\n";

connect(s, (sockaddr*)&peer, sizeof(peer));

cout << "Client is connected to the server\n";

int buf[255], n = 0, res;

char ans = 'n';

cout << "Enter numbers, please" << endl;

for (int i = 0; ans == 'n'; i++)

{

cin >> buf[i];

n++;

do

{

cout << "Next number or exit? (n/e)\n";

cin >> ans;

} while (ans != 'n' && ans != 'e');

}

send(s, (char*)&n, sizeof(n), 0);

cout << "Data is sent\n";

for (int i = 0; i < n; i++)

send(s, (char*)&buf[i], sizeof(int), 0);

cout << "Data is sent\n";

if (recv(s, (char*)&res, sizeof(res), 0) != 0)

cout << "Amount of numbers multiple of 3: " << res << endl;

closesocket(s);

cout << "Client is disconnected from the server\n";

WSACleanup();

cout << "Work is complited";

return 0;

}

Скриншоты






написать администратору сайта