Windows Sockets 2. Создание соединения

Страницы работы

10 страниц (Word-файл)

Содержание работы

Тема. Windows Sockets 2.

Platform SDK: Windows Sockets 2

gethostname

gethostbyname преобразование имени сетевого узла в IP-адрес

img/20_1.gif (3222 b)

1.  Что такое сокет

1.1.  Отличие от других способов обмена данными (зачем нужны)

Харт 313

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

Но! именованные каналы и mailslot-ы обладают существенным недостатком: они не являются промышленным стандартом – Berkelay Sockets??? (то есть пока Вы общаетесь между компьютерами, на которых стоит ОС Windows, все будет хорошо) => если Вам нужно обмениваться данными в гетерогенной сети (в которой не только ОС Windows), то скорее всего не получится.

За счет возможности стандартизованного взаимодействия WinSock позволяет программистам использовать высокоуровневые протоколы, такие как http, RPC и COM (это все высокоуровневые модели стандартизованного системо-независимого взаимодействия между процессами через сеть.)

1.2.  Специфика

Историческая справка: изначально сокеты были разработаны для Berkeley UNIX платформы для организации связи между разными процессами. Winows Sockets были разработаны как расширение Berkelay Sockets API для среды Windows.

Специфика Windows sockets:

  • являются оболочкой для протокола TCP/IP;
  • предоставляются программисту посредством WS2_32.DLL. Для использования этой dll требуется подключить заголовочный файл winsock2.h и библиотеку импорта WS2_32.lib;
  • содержат функции трех видов: функции Беркли (базовые) информационные функции (получение информации о наименовании доменов, службах, протоколах Internet) Расширения Windows для функций Беркли
  • есть две версии WinSock: WinSock 1.1 - поддержка только TCP/IP WinSock 2.0 - Поддержка дополнительного программного обеспечения
  • сокет должен быть создан на основе соответствующего протокола Таненбаум 796: - надежный, ориентированный на соединение байтовый поток (аналог байтового именованного канала) – гарантируется порядок следования и доставка. Обычно TCP (transport control protocol) - надежный, ориентированный на соединение поток пакетов (аналог именованного канала сообщений) - ненадежная (не ориентированная на соединение) передача пакетов (особенно полезен для приложений реального времени, когда производительность важнее надежности - мультимедиа) – сеть может терять пакеты и доставлять их в неверном порядке. Обычно UDP (user datagram protocol).
  • все функции могут быть блокирующие и неблокирующие. Обычно блокирующие это функции Беркли. То есть при работе такой функции нельзя выполнять другие функции WinSock.

2.  Создание соединения

Основные шаги для создания соединения клиент-сервер

Сервер

Клиент

1. Создание сокета, ожидающего запросы на соединение от клиентов.

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

3. Разрешение попытки соединения от клиента.

4. Передача и прием данных.

4. Передача и прием данных.

5. Закрытие соединения.

5. Закрытие соединения.

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

2.1.  Сервер

Последовательность действий:

2.1.1.  Инициализация библиотеки WS2_32.DLL, для того, чтобы ее можно было использовать в процессе

WSA – Windows Sockets Asynchronous

Инициализация заключается в сопоставлении номера версии и возможностями реально существующей DLL в системе.

Прототип функции инициализации:

int WSAStartup(    //возвращаемое значение ==0 в случае успеха (!=0 - dкоды ошибок -> MSDN)

WORD wVersionRequested//это значение должен сформировать программист при вызове функции: , младший байт – основной номер версии, старший байт – дополнительный номер версии, например: 2.0

LPWSADATA lpWSAData//если вызов завершится удачно, то по указанному адресу функция сформирует информацию о поддержке dll-ью требуемой функциональности сокета (о версии)

);

Структура WSADATA:

struct WSADATA { WORD wVersion; //версия, которую предполагает использовать программист   WORD wHighVersion;    //самая поздняя доступная версия   char szDescription[WSADESCRIPTION_LEN+1]; //строка с описанием, например «WinSock 2.0»   char szSystemStatus[WSASYS_STATUS_LEN+1]; //например, “Running”   unsigned short iMaxSockets; //в версии 2 игнорируется   unsigned short iMaxUdpDg;   //в версии 2 игнорируется   char FAR* lpVendorInfo;     //в версии 2 игнорируется

Похожие материалы

Информация о работе