Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_elektronnykh_ustroystv.doc
Скачиваний:
53
Добавлен:
28.05.2015
Размер:
1.44 Mб
Скачать

Void Stop()

{

if (g_serverSocket == INVALID_SOCKET)

{

strcpy(g_szStatus, «Сервер не запущен или уже остановлен»);

return;

}

closesocket(g_serverSocket);

g_serverSocket = INVALID_SOCKET;

If (wsaCleanup())

{

strcpy(g_szStatus, “Ошибка освобождения Winsock”);

return;

}

strcpy(g_szStatus, “Сервер успешно остановлен”);

return;

}

Итак, нам нужно запустить и остановить сервер. Это будет происходить по нажатию левой кнопки мыши – запуск, правой – остановка. В текст простейшего приложения Windowsвнесены следующие изменения:

  1. добавлено подключение заголовочного файла winsock.h;

  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протокола, можно воспользоваться любым Интернет – браузером:InternetExplorer,Firefox,Opera,GoogleChromeи т.д. Чтобы узнатьIPадрес сервера в сети можно воспользоваться командойipconfig. Для это необходимо запустить программу «Командная строка» (Пуск-Все программы – Стандартные – Командная строка или Пуск – Выполнить… - набратьcmdи нажатьenter), набратьipconfigи нажатьenter. Появится информация, подобная показанной на рисунке 2.4.5.

Рисунок 2.4.6 – Команда ipconfig

Соответственно, зная IP-адрес компьютера, на котором запущена приведенная программа, с помощью браузера можно к ней подключиться с любого компьютера сети. Другим вариантом является использование уникальногоIP– адреса 127.0.0.1, что соответствует адресу локальной машины. То есть, можно запустить сервер и подключится к нему с этого же компьютера, используя приведенныйIP-адрес илиURLlocalhost, соответствующий такому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;

// Прототип функции обратного вызова для обработки сообщений

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]