Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаба14.doc
Скачиваний:
9
Добавлен:
12.11.2019
Размер:
572.93 Кб
Скачать

4. Решения при работе с сокетами

В случае, если приложение не имеет окна, могут применяться другие решения для построения приложений на сокетах.

  1. Неблокирующие сокеты на событиях WSAEVENT.

    1. Создается событие WSAEVENT

    2. Вызывается функция WSAEventSelect, которая связывает событие с сокетом и указывает на какие операции событие будет реагировать (соединение, чтение, запись, закрытие).

    3. Вызывается функция WSAWaitForMultipleEvents, которая ожидает установки события при готовности к определенной операции.

    4. Вызывается функция WSAEnumNetworkEvents для определения какую операцию можно произвести с сокетом.

    5. В данном случае используются функции Winsocket версии 2.0. поэтому необходимо подключать заголовочный файл winsock2.h и библиотеку ws2_32.lib. (причем заголовочный файл windows.h в этом случае подключать не следует).

  2. Неблокирующие сокеты с использованием функции select.

    1. Объявляется множество сокетов fd_set.

    2. В множество добавляется сокет, установленный на прослушивание – макрос FD_SET.

    3. Проверяется множество сокетов – функция select. Функция select маркирует в множестве те сокеты, которые готовы к выполнению какой-либо операции.

    4. С помощью макроса FD_ISSET проверяется конкретный сокет, входящий в множество.

  3. Неблокирующие сокеты с использованием структуры OVERLAPPED.

    1. Используется асинхронный ввод – вывод через сокеты с помощью структуры OVERLAPPED.

    2. Для ассоциации структуры с сокетом используется функция - WSIOCTL

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

Примечание: при использовании сокетов версии 1.1 необходимо подключать заголовочный файл winsock.h и библиотеку wsock32.lib. В случае, если используются функции Winsocket версии 2.0. поэтому необходимо подключать заголовочный файл winsock2.h и библиотеку ws2_32.lib. (причем заголовочный файл windows.h в этом случае подключать не следует).

Сокеты, работающие на основе протокола UDP в отличие от сокетов, работающих на протоколе TCP/IP не создают канал связи и не гарантируют доставку. Причем пакеты, отправленные позже, могут придти на другую сторону раньше. Программист сам несет ответственность за сбор пакетов (см. пример программы в приложении 4).

5. Порядок выполнения работы

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

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

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