Прежде чем начать работу с сетью, нужно подключить необходимую версию библиотеки. В зависимости от версии изменяется набор доступных функций. Если загрузить первую версию библиотеки WinSock, а вызвать функцию из второй, то произойдет ошибка. При неподключении библиотеки любой вызов сетевой функции возвратит ошибку WSAN0TINITIALISED.

Для загрузки библиотеки используется функция WSAStartup, которая описывается следующим образом:

function WSAStartup(
wVersionRequested: word:

vaг WSAData: TWSAData )• Integer- stdcall :

Первый параметр wVersionRequested - это запрашиваемая версия библиотеки. Младший байт указываемого числа определяет основной номер версии, а старший байт - дополнительный номер Чтобы вам легче было работать с этим параметром, я советую использовать функцию MAKEW0RD(i, j), где i - это старший байт, a j - младший.

Второй параметр - это указатель на структуру WSAData, в которой после выполнения функции будет находиться информация о библиотеке.

Если загрузка прошла успешно, то функция возвратит нулевое значение, в противном случае - произошла ошибка и результатом будет ее код. Рассмотрим основные коды ошибок, возникающих во время загрузки библиотеки:

• WSASYSNOTREADY - основная сетевая подсистема не готова к сетевому соединению;
• WSAVERNOTSUPPORTED - версия библиотеки не поддерживается;
• WSAEPROCLIM - превышен предел поддерживаемых ОС задач;
• WSAEFAULT - неправильный указатель на структуру WSAData;

• WSAEINPROGRESS - выполняется операция в блокирующем режиме. Вы уже запустили на выполнение какую-то функцию и нужно дождаться завершения ее работы.

Структура TWSAData описывается следующим образом:

PWSAData = "TWSAData: {SEXTERNALSYM WSAData} WSAData = record
wVersion: word;
wHighVersion: word;
szDescription: array[0..WSADESCRIPTION_LEN] of Char: szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char: iMaxSockets: word: iMaxUdpDg: word: lpVendorlnfo: PChar;
end;
TWSAData = WSAData;

Как видите, в заголовочном файле есть структура WSAData (именно так называется структура в библиотеке) и псевдоним для нее TWSAData (так принято именовать структуры и объекты в Delphi, начиная с буквы Т).

Рассмотрим параметры структуры TWSAData:

• wVersion - версия подключенной библиотеки WinSock, которая может отличаться от запрашиваемой. Если вы запросили 1.1, то может загрузиться 2.0, но только не 1.0;
• wHighVersion - последняя версия;
• szDescription - текстовое описание, которое заполняется не во всех версиях сетевой библиотеки;
• szSystemStatus - текстовое описание состояния, которое заполняется не во всех версиях;
• iMaxSockets - максимальное количество открываемых соединений. Эта информация на данный момент не соответствует действительности, потому что максимальное число зависит только от доступных ресурсов. Параметр остался только для совместимости с первоначальной спецификацией. Нет смысла создавать новую структуру, которая будет отличаться от старой только отсутствием одного параметра. Чаще всего такой параметр просто игнорируется библиотекой. Вы тоже должны игнорировать его на случай каких-либо изменений в будущих версиях;
• iMaxlldpDg - максимальный размер дейтаграммы (пакета). Информация не соответствует действительности, потому что размер зависит от протокола;

в 1 pVendorlnfо - информация о производителе. Здесь может быть текстовая строка с описанием.

Не все параметры могут быть заполнены. Чаще всего параметры szDescription и 1 pVendorlnf о остаются пустыми.

По правилам хорошего тона вся выделяемая память и загружаемая информация должны освобождаться. Для освобождения библиотеки WinSock по окончании работы с программой используется функция WSACleanup, которая описывается следующим образом:

function WSACleanup: Integer;
stdcall;

Функции не нужны параметры, потому что она просто освобождает библиотеку, после чего работа с сетевыми функциями становится недоступной. Если при выходе из программы не освободить библиотеку, то система сделает это самостоятельно, но на это не стоит надеяться Как мы уже говорили, все, что было выделено для программы, должно быть освобождено.

4.2. Обработка сетевых ошибок || Оглавление || 4.4. Инициализация сети


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31