Контрольная работа по "Компьютерной сети"
Автор: tima301095 • Январь 2, 2023 • Контрольная работа • 7,813 Слов (32 Страниц) • 195 Просмотры
Министерство образования Республики Беларусь
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
Институт информационных технологий
КОНТРОЛЬНАЯ РАБОТА
По дисциплине «Компьютерные сети»
Вариант 2
Минск,2021
Часть 1 – программирование (5 задач, из лаб. Работ 1-4, 8 по своему варианту):
Задача №1 (л.р.1 вариант №2): Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Функционирование клиента и сервера реализовать следующим образом: клиент посылает слово серверу, сервер возвращает назад в обратном порядке следования букв это слово клиенту.
Краткое описание алгоритма:
Клиент отправляет слово на сервер, сервер обрабатывает информацию и переворачивает слова задом на перед, результат возвращается клиенту.
Листинг с пояснениями:
//сервер
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h> //библиотека, позволяющая реализовать программный интерфейс WinSock
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
WORD wVersionRequested; //определяет макс. номер версии WinSock, доступный приложению
WSADATA wsaData; //структура wsaData, содержит номер версии (поле wVersion),
//максимальный номер версии (поле wHighVersion),
//текстовые строки с описанием реализации WinSock, максимальное число сокетов,
//доступных процессу и максимально допустимый размер дейтаграмм
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, & wsaData); //инициализация WinSock API
SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //дескриптор сокета, функция для
// создания сокета, принимает три параметра: домен, тип сокета и протокол
struct sockaddr_in local; //структура адреса
local.sin_family = AF_INET; //всегда имеет значение AF_INET
local.sin_port = htons(1280); //определяет порт, который будет ассоциирован с сокетом
local.sin_addr.s_addr = htonl(INADDR_ANY); //физический IP-адрес компьютера
int c = bind(s, (struct sockaddr*)&local, sizeof(local)); //для связывания конкретного адреса с сокетом
int r = listen(s, 5); //помещает сокет в состояние прослушивания
while (true)
{
char b[255];
sockaddr_in remote_addr;
int size = sizeof(remote_addr);
SOCKET s2 = accept(s, (struct sockaddr*)&remote_addr, &size);//При получении запроса клиента
//выполняется открытие соединения
while (recv(s2, b, sizeof(b), 0) != 0) //прием данных через сокет потока
{
_strrev(b); //инвертировать строку
send(s2, b, sizeof(b), 0);// посылает данные на соединенный сокет
}
closesocket(s2); //завершение работы сокета
}
WSACleanup(); //завершая программу, прекращаем работу с WinSock
return 0;
}
//клиент
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <iostream>
#include <stdlib.h>
#include <windows.h>
#pragma comment(lib, "WS2_32.lib")
using namespace std;
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
WSAStartup(wVersionRequested, &wsaData);
struct 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);
connect(s, (struct sockaddr*)&peer, sizeof(peer));//приложение-клиент посылает запрос
...