strcpy(g_szStatus, “Ошибка освобождения Winsock”);
return;
}
strcpy(g_szStatus, “Сервер успешно остановлен”);
return;
}
Итак, нам нужно запустить и остановить сервер. Это будет происходить по нажатию левой кнопки мыши – запуск, правой – остановка. В текст простейшего приложения Windows внесены следующие изменения:
2. определены константы для номера используемой версии winsock и пользовательского сообщения, которое будет генерироваться при поступлении запроса с клиентской программы;
3. введены функции Start() и Stop() для запуска и остановки сервера;
4. добавлены две глобальных переменных g_szStatus и g_serverSocket для хранения выводимой на экран текстовой информации о состоянии сервера и сокет, запись и чтение в эти переменных осуществляется как в оконной процедуре, так и в Start() и в Stop();
5. в функцию CreateWindow внесены косметические изменения – названия программы, стиль окна без изменения размера, произвольное начальное положение, описываемое константой CW_USEDEFAULT, размеры окна, опытным путем подобранные под выводимый текст состояния;
6. новая оконная процедура теперь обрабатывает сообщения о создании окна, отпускании левой кнопки мыши, отпускании правой кнопки мыши, поступлении запроса клиента, уничтожении окна.
Результат запуска приложения показан на рисунках 2.4.3, 2.4.4.
Рисунок 2.4.3 – Запуск серверной программы
Рисунок 2.4.4 – Запуск сервера по щелчку левой кнопки мыши
При запуске сервера может появиться оповещение файрволла о сетевой активности приложения. Как подключится к серверу? Для этого необходима другая программа, называемая клиентом. Поскольку при связи сокета с портом указан порт 80, используемый для HTTP протокола, можно воспользоваться любым Интернет – браузером: Internet Explorer, Firefox, Opera, Google Chrome и т.д. Чтобы узнать IP адрес сервера в сети можно воспользоваться командой ipconfig. Для это необходимо запустить программу «Командная строка» (Пуск-Все программы – Стандартные – Командная строка или Пуск – Выполнить… - набрать cmd и нажать enter), набрать ipconfig и нажать enter. Появится информация, подобная показанной на рисунке 2.4.5.
Рисунок 2.4.6 – Команда ipconfig
Соответственно, зная IP-адрес компьютера, на котором запущена приведенная программа, с помощью браузера можно к ней подключиться с любого компьютера сети. Другим вариантом является использование уникального IP – адреса 127.0.0.1, что соответствует адресу локальной машины. То есть, можно запустить сервер и подключится к нему с этого же компьютера, используя приведенный IP-адрес или URL localhost, соответствующий такому IP – адресу. Это очень удобно при отладке сетевых программ на одном компьютере, не используя подключение к локальной или глобальной сети.
Результат подключения клиента показан на рисунке 2.4.5.
Рисунок 2.4.7 – Подключение клиента к серверу
Сервер успешно среагировал на подключение клиента обработкой введенного сообщения WM_SERVER_ACCEPT. Однако для полноценной поддержки взаимодействия «клиент – сервер», необходимо, чтобы сервер «ответил» клиенту. Пока этого не происходит, что видно по состоянию браузера, который подключился к серверу, но «завис» на этапе открытия страницы, ожидая ответа.
Окончательный текст демонстрационной программы-сервера следующий:
// Стандартный включаемый файл Windows
#include <windows.h>
#include <winsock.h>
const int WINSOCK_VERSION = 0x0101;
const int WM_SERVER_ACCEPT = WM_USER + 1;
// Прототип функции обратного вызова для обработки сообщений