Вариант №12

Разработать две программы – сервер и клиент. Клиент принимает от пользователя две даты – строки вида ЦЦ. ЦЦ. ЦЦЦЦ, где Ц – это любая цифра из диапазона [0-9] и отсылает серверу через именованный конвейер. Сервер принимает даты из именованного конвейера, вычисляет полное количество дней, прошедших между двумя полученными датами, и выводит его на
экран.

Вариант №13

Разработать две программы – сервер и клиент. Клиент принимает от пользователя два значения времени – строки вида ЦЦ. ЦЦ. ЦЦ, где Ц – это любая цифра из диапазона [0-9], и отсылает серверу через почтовый ящик. Сервер принимает из почтового ящика обе строки, вычисляет полное количество секунд, прошедших между двумя значениями времени, и выводит его на экран.

Вариант №14

Разработать две программы – сервер и клиент. Клиент отсылает серверу через именованный конвейер две строки, введенные пользователем. Сервер принимает из именованного конвейера две строки, осуществляет поиск вхождения второй строки в первую любым известным методом, кроме прямого (алгоритм Кнута-Мориса-Пратта, алгоритм Боуэра-Мура), и выводит на экран значение индекса элемента первой строки, с которого началось совпадение, или -1 в противном случае.

Вариант №15

Разработать две программы – сервер и клиент. Клиент отсылает серверу через почтовый ящик две строки, введенные пользователем. Сервер принимает из почтового ящика две строки, осуществляет поиск количества вхождений второй строки в первую любым известным методом, кроме прямого (алгоритм Кнута-Мориса-Пратта, алгоритм Боуэра-Мура), и выводит на
экран полученное значение.

НЕ нашли? Не то? Что вы ищете?

Вариант №16

Разработать две программы – сервер и клиент. Клиент принимает от пользователя дату – строку вида ЦЦ. ЦЦ. ЦЦЦЦ, где Ц – это любая цифра из диапазона [0-9,] и отсылает серверу через именованный конвейер. Сервер принимает из именованного конвейера дату и выводит на экран число и месяц прописью, а за последними четырьмя – слово «года» (например, ввод «29.02.2008» приводит к выводу «Двадцать девятое февраля 2008 года»).

Вариант №17

Разработать две программы – сервер и клиент. Клиент принимает от пользователя значение времени – строку вида ЦЦ. ЦЦ. ЦЦ, где Ц – это любая цифра из диапазона [0-9] и отсылает серверу через почтовый ящик. Сервер принимает значение времени из почтового ящика и выводит на экран значение часов минут и секунд прописью (например, ввод «12.01.20» приводит к выводу «двенадцать часов одна минута двадцать секунд»).

Вариант №18

Разработать две программы – сервер и клиент. Клиент принимает от пользователя строку из нулей и единиц – «битовую строку» и отсылает серверу через именованный конвейер. Сервер принимает из именованного конвейера битовую строку, инвертирует ее, выводит на экран значение инвертированной строки, переводит ее в число в десятичный формат и выводит полученное число на экран.

Вариант №19

Разработать две программы – сервер и клиент. Клиент принимает от пользователя строку из нулей и единиц – «битовую строку» и отсылает серверу через почтовый ящик. Сервер принимает битовую строку, осуществляет ее реверс, когда нули заменяются на единицы, а единицы на нули. Полученная строка выводится на экран, затем программа переводит ее в число в десятичном формате и выводит полученное число на экран.

Вариант №20

Разработать две программы – сервер и клиент. Клиент отсылает число, введенное пользователем, серверу через именованный конвейер. Сервер принимает число из именованного конвейера, вычисляет его факториал по формуле N! = N*(N-1)!, где 0!=1, и выводит его на экран.

Вариант №21

Разработать две программы – сервер и клиент. Клиент принимает от пользователя квадратную матрицу и отсылает серверу через почтовый ящик. Сервер принимает матрицу из почтового ящика, осуществляет обход только крайних ее элементов, вычисляет их сумму, и выводит на экран.

Вариант №22

Разработать две программы – сервер и клиент. Клиент принимает от пользователя элементы целочисленного вектора (одномерного массива), а также значение ключа для поиска, и отсылает серверу через именованный конвейер. Сервер принимает вектор и ключ из конвейера, затем осуществляет поиск элемента по ключу любым известным методом, кроме прямого (двоичный, случайный, золотого сечения), и выводит результат на экран.

Вариант №23

Разработать две программы – сервер и клиент. Клиент принимает от пользователя строку символов и отсылает серверу через почтовый ящик. Сервер принимает строку из почтового ящика, осуществляет замену всех латинских букв на их аналоги из кириллицы и выводит результат на экран.

Вариант №24

Разработать две программы – сервер и клиент. Клиент принимает от пользователя строку символов и отсылает серверу через именованный конвейер. Сервер принимает строку из именованного конвейера, осуществляет смену регистра всех букв и выводит результат на экран.

Вариант №25

Разработать две программы – сервер и клиент. Клиент принимает от пользователя беззнаковое целое число и отсылает серверу через именованный конвейер. Сервер принимает число из именованного конвейера. Если оно является степенью двойки, то на экран выводится показатель степени, и сообщение «не является степенью двойки» в противном случае.

Лабораторная работа № 9. Использование механизма сокетов с сетевыми протоколами, не ориентированными на установление соединения

Цель: Изучение механизма сокетов в операционной системе Windows.

Задачи:

1. Изучение теоретического материала по сокетам с сетевыми протоколами, не ориентированными на установление соединения.

2. Составление алгоритма программы.

3. Программная реализация.

Ход работы:

1.  Ознакомиться с описанием функций WinSock API, которые служат для работы с протоколами, которые не устанавливают соединение.

2.  Модифицировать обе программы, написанные в ходе выполнения лабораторной работы №8, используя сетевые протоколы без установления логического соединения (UDP).

3.  Написать отчет и представить его к защите вместе с исполняемыми модулями программ и их исходными текстами. Программы должны позволять взаимодействовать, будучи запущенными на разных рабочих станциях.

Ход защиты:

1. Продемонстрировать преподавателю программы, использующие сетевые протоколы без установления логического соединения.

2. Пояснить программный код разработанных приложений.

Основная цель разработки спецификации WinSock 2 – создание независимого от протоколов транспортного интерфейса.

Перед использованием сокетов необходимо загрузить корректную версию библиотеки WinSock с помощью функции инициализации

int WSAStartup (

WORD Version, // номер версии

LPWSADATA Data); // информация о версии

На современных платформах Win32 используется версия 2.2. Чтобы
загрузить библиотеку этой версии нужно вызвать WSAStartUp следующим образом.

#include <winsock2.h>

#include <stdio. h>

#include <stdlib. h>

# pragma comment (lib, “ws2_32.lib”)

void main(void)

{

WSADATA wsData;

if (WSAStartup (0x0202, &wsData) != 0) {

printf ("Невозможно загрузить Winsock 2.2\n");

exit (1);

}

printf("Библиотека инициализирована.\n");

WSACleanup ();

}

Для завершения работы с WinSock необходимо вызвать WSACleanup, которая освобождает занятые ресурсов.

void WSACleanup (void);

Связь без установления соединения выполняется при помощи пользовательских дейтаграмм протокола UDP. Он не гарантирует надежности,
однако может осуществлять передачу данных нескольким адресатам и принимать их от нескольких источников. В частности, данные, отправляемые клиентом, передаются на сервер немедленно, независимо от готовности (или неготовности) сервера. При получении данных сервер не подтверждает их прием. Данные передаются порциями, называемыми дейтаграммами.

При использовании протокола IP устройствам назначается 32-разрядный IP-адрес версии 4. Для взаимодействия с сервером по TCP клиент должен указать IP-адрес сервера и номер порта службы. Чтобы прослушивать входящие запросы клиента, сервер тоже должен указать IP-адрес и номер порта. В Winsock IP-адрес и порт службы указываются в структуре SOCKADDR_IN:

struct sockaddr_in {

short sin_family; // для IP должен использоваться AF_INET

u_short sin_port;

// любой свободный порт из диапазона (1024, 65535)

struct in_addr sin_addr; // IP-адрес в 4-байтном виде

char sin_zero[8]; // заполнитель нулями

};

Вспомогательная функция inet_addr преобразует IP-адрес из точечной нотации в беззнаковое длинное целое число, в котором байты следуют в соответствии с сетевым порядком следования:

unsigned long inet_addr (const char FAR * cp);

// строка с адресом в десятично-точечной нотации

Существуют два специальных адреса INADDR_ANY, который позволяет серверу слушать клиента через любой сетевой интерфейс на несущем компьютере, и INADDR_BROADCAST, позволяющие широковещательно рассылать дейтаграммы по сети.

Несколько замечаний относительно порядка следования байтов. В процессорах x86 и Pentium представляют многобайтные числа от менее значимого байта к более значимому. В частности, IP-адрес и номер порта хранятся в памяти именно так. Это так называемый системный порядок. При передаче их по сети стандарты требуют, чтобы многобайтные значения представлялись от старшего байта к младшему, что называется сетевым порядком.
Две следующие функции позволяют преобразовывать, соответственно, 4- и 2-байтовые числа из системного порядка в сетевой.

u_long htonl(u_long hostlong);

u_short htons (u_short hostshort);

Следующие две функции решают обратную задачу, т. е. переставляют байты из сетевого порядка в системный:

u_long ntohl(u_long netlong);

u_short ntohs (u_short netshort);

Следующий фрагмент демонстрирует, как создается структура с адресом и номером порта при помощи описанных функций.

SOCKADDR_IN InetAddr;

INT PortNum = 5101;

InetAddr. sin_family = AF_INET;

InetAddr. sin_addr. s_addr = inet_addr ("192.168.123.45");

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26