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

function socket(
af: Integer:
type: Integer:
protocol: Integer ): TSocket;
stdcall:

Давайте рассмотрим параметры этой функции:

• af - семейство протоколов, которые мы собираемся использовать. У каждого протокола своя адресация, и в зависимости от выбранного протокола будет свой способ указания адреса компьютера. Вот некоторые из семейств, которые можно указывать в этом параметре:

О AFUNSPEC - спецификация не указана;
О AFINET - интернет-протоколы TCP, UDP и т. д. В этой книге мы будем использовать именно эти протоколы, как самые популярные и распространенные на данный момент;
О AFJPX - протоколы IPX, SPX;
О AFNETBIOS - протокол NetBios;

О AFAPPLETALK - протокол AppleTalk для компьютеров фирмы Apple

• type - тип спецификация для нового сокета. Здесь можно указывать одно из следующих значений:

О SOCK_STREAM - передача будет происходить с установкой соединения. При использовании интернет-протоколов применяется TCP;

О SOCK_DGRAM - данные передаются без установки соединения. При использовании интернет-протоколов применяется UDP.

• protocol - указывается нужный протокол. Существует большое количество протоколов; вы можете узнать об используемых константах в справочной системе по программированию WinSock. В нашем случае применяется константа IPPR0T0TCP, которая соответствует протоколу TCP.

Во второй версии WinSock для создания сокета можно использовать функцию WSASocket. Она описывается следующим образом:

function WSASocket(
af: Integer:
iType: Integer:
protocol: Integer:
lpProtocolInfo: LPWSAProtocol_Info;
g: GROUP:
dwFlags: DWORD ): TSocket: stdcal1;

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

• 1 pProtocol Info - указатель на структуру WSAPR0T0C0LINF0, в которой определяются характеристики создаваемого сокета;
• g - идентификатор группы сокетов;

• dwFl ags - атрибуты сокета.

Более подробно с указанными параметрами мы познакомимся в процессе написания примеров. Это поможет вам лучше понять их и сразу же увидеть результат работы.

Результатом выполнения функции будет сетевой дескриптор (значение типа TSocket), который будет использоваться в каждой последующей сетевой функции. Если произошла ошибка, то результатом будет INVALIDSOCKET, а код ошибки можно определить с помощью вызова функции WSAGetLastError. Запомните, что эта функция возвращает в случае ошибки INVALI D_S0CKET, а не S0CKETERR0R, как многие другие сетевые функции.

Функция WSASocket может генерировать следующие ошибки:

• WSANOTINITIALISED - сначала необходимо вызвать функцию WSASturtup, а потом создавать сокет;
• WSAENETDOWN - связь нарушена, возможные причины - отошел кабель или произошло отключение от Интернета;
в WSAEAFNOSUPPOIJT - запрашиваемая адресация (значение параметра af) не поддерживается;
в WSAEINPROGRESS - выполняется операция в блокирующем режиме. Вы уже запустили на выполнение какую-то функцию и нужно дождаться завершения ее работы;
в WSAEMFILE - ресурс доступных дескрипторов исчерпан;
в WSAENOBUFS - недостаточно памяти буфера, и сокет не может быть создан;
в WSAEPR0T0N0SUPP0RT - протокол не поддерживается;
в WSAEPR0T0TYPE - неверный тип спецификации (параметр type) для выбранного протокола;

в WSAES0CKTN0SUPP0RT - указанный тип сбкета не поддерживается данной адресацией.

Большинство ошибок возникает из-за неправильного указания значений. Например, протокол TCP работает с установкой соединения, поэтому в параметре type нужно указывать SOCKSTREAM (протокол с установкой соединения), а в параметре protocol должно быть значение IPPR0T0TCP. Если в параметре type поставить значение SOCKDGRAM - протокол без установки соединения, то произойдет ошибка WSAEPR0T0TYPE

4.3. Загрузка и выгрузка сетевой библиотеки || Оглавление || 4.5. Функции сервера


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



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

  • Январь
    2022
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс