Разработка и описание алгоритмов работы
Состав и назначение
В состав программного обеспечения, разработанного в соответствии с заданием входят:
- программа, выполняющая функции сервера;
- две прграммы, выполняющие функции клиентов.
Программа – сервер должна выполнять следующие функции:
- подключать библиотеку для работы с сокетами;
- принимать и обеспечивать запросы на соединение с программами – клиентами через сокеты;
- посылать сообщения программам клиентам;
- принимать в асинхронном режиме информацию от программ-клиентов и выводить ее в рабочее окно;
- отключать выбранного клиента;
Программа-клиент должна выполнять следующие функции:
- подключать библиотеку для работы с сокетами;
- обеспечивать соединение с программой-сервером;
- выполнять подготовку информации для передачи программе-серверу;
- принимать и выводить в рабочее окно сообщения от программы-сервера;
- сообщать пользователю об отключении сервера.
Описание программы-сервера
Описание переменных
Описание переменных, которые используются в программе дано в таблице 4.2.
Таблица 4.2- Описание переменных и констант программы-сервер
Исходный текст | Описание |
char szBuf[512]; | Буфер для подготовки данных |
DWORD cbWritten; | Количество записанных данных |
static HWND hwndEdit; | Дескриптор поля редактирования текста |
TCHAR mess[2048]; | Буфер для подготовки сообщений |
TCHAR* m_mess = mess; | Ссылка на буфер подготовки сообщений |
#define SERV_PORT 5000 | Порт сервера |
#define WSA_ACCEPT (WM_USER+0) | Код сообщения на подключение клиента |
#define WSA_NETEVENT (WM_USER+1) | Код сообщения о сетевом событии |
WSADATA wsaData; | Сведения о конкр. реализации интерфейса Windows Sockets |
WORD wVersionRequested = MAKEWORD(1, 1); | Номер требуемой версии Windows Sockets (не ниже) |
int err=0; | Код ошибки |
SOCKET srv_socket=INVALID_SOCKET; | Сокет сервера |
int ClientNum = -1; | Номер текущего клиента |
SOCKET sock[2]; | Сокеты клиентов |
SOCKADDR_IN sockaddr[2]; | Адреса клиентов |
Процедура создания сокета
Процедурой выполняются следующие функции:
- проверка на повторность задания сокета;
- создание структуры данных для сокета и получения дескриптора сокета;
- задание типа и значения адреса и номера порта для сокета;
- связывание сокета с адресными данными;
- установка режима прослушивания сети для выявления попыток соединения с сокетом;
- установка режима асинхронного взаимодействия с сокетом.
Схема алгоритма работы процедуры представлена на рисунке 4.3.
Проверка на повторность задания сокета выполняется блоками 2,3 (рисунок 4.3 ) и операторами 117-121 приложения И.
В процедуре создается потоковый сокет и задается структура для хранения адресных данных (блоки 5-7, рисунок 4.3 и операторы 122-128 приложения И.
Для сокета определяется Интернет семейство адресов. IP адрес устанавливается по умолчанию – обычно это значение адреса локального хоста 127.0.0.1. Номер порта выбран из области свободно используемых значений и равен 5000. С помощью функции htons порядок байтов этого значения преобразуется в сетевой порядок байтов – первым идет старший байт. Эти действия реализуются блоками 9-10 на рисунке 4.3 и операторами 129-133 приложения И.
Рисунок 4.3 – Схема алгоритма процедуры создание сокета на стороне сервера
Связывание сокета с адресными данными реализуются блоками 11-14 на рисунке 4.3 и операторами 134 -140 приложения И.
Установка режима прослушивания сети для выявления попыток соединения с сокетом реализуются блоками 15-17 на рисунке 4.3 и операторами 141 -147 приложения И.
Установка режима асинхронного взаимодействия с сокетом реализуются блоками 18-21 на рисунке 4.3 и операторами 148 -158 приложения И.