Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
prakt-Storozhok.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.98 Mб
Скачать

1.2.2. Создание сокета

function socket(

af,

type,

protocol: Integer

): TSocket; stdcall;.

Первый параметр - af, определяет семейство адресов протокола. Например, если вы хотите создать UDP- или ТСР-сокет, подставьте константу AF_INET, чтобы сослаться на стек протоколов TCP/IP.

Второй параметр - type, это тип сокета для рассматриваемого протокола. Он может принимать одно из следующих значений: SOCK_STREAM, SOCKDGRAM, SOCK_PACKET, SOCK_RAW, SOCK_RDM.

Третий параметр - protocol, указывает конкретный транспорт, если для семейства адресов и типа сокета существует несколько записей. Возможны следующие значения:

  • IPPROTO_IP протокол IP;

  • IPPROTO_TCP протокол TCP;

  • IPPROTO_UDP - протокол UDP ;

  • IPPROTO_RAW - протокол IP или ICMP;

  • IPPROTO_ICMP - протокол IСМР.

1.2.3. Определение номера порта и ip-адреса, по которому сервер будет принимать данные

function bind(

s: TSocket;

var addr: TSockAddr;

namelen: Integer

): Integer; stdcall;.

Первый параметр s задает сокет, на котором вы ожидаете соединения клиентов.

Второй параметр с типом SockAddr_in - просто универсальный буфер. Фактически в этот буфер вы должны поместить адрес, соответствующий стандартам используемого протокола.

Последний параметр задает размер переданной структуры адреса, зависящей от протокола.

При использовании IP компьютерам назначается IP-адрес, состоящий из 32 бит, официально называемый IP-адресом версии 4 (IPv4). Для взаимодействия с сервером по TCP или UDP клиент должен указать IР-адрес сервера и номер порта службы. Чтобы прослушивать входящие за­просы клиента, сервер также должен указан. IP-адрес и номер порта. В Winsock IP-адрес и порт службы задают в структуре SockAddr_in.

Sockaddr_in=record

case Integer of

0: (sin_family: u_short;

sin port: u_short;

sin addr: TInAddr;

sin zero: array[0..7] of Char);

l: (sa_family: u_short;

sa_data: array[0..13] of Char)

end;.

Поле sin_family должно быть равно AF_INET: этим Winsock сообщают об использовании семейства адресов IP.

Поле sin_роrt задает, какой коммуникационный порт TCP или UDP будет использован для идентификации службы сервера. Приложения должны быть очень внимательны при выборе порта, поскольку некоторые доступные порты зарезервированы для использования популярными службами: такими, как File Transfer Protocol (FTP) и Hypertext Transfer Protocol (HTTP). Эти порты обслуживаются и распределяются центром Internet Assigned Numbers Authority (IANA). По сути, номера портов делят на три категории: стандартные, зарегистрированные и динамические и (или) частные порты. Диапазоны портов:

  • 0-1023 - управляются IANA и зарезервированы для стандартных служб;

  • 1024-49151 -зарегистрированы IANA и могут использоваться процессами и программами;

  • 49152-65535 - являются динамическими и (или) частными.

Во избежание накладок с портами, уже занятыми системой или другим приложением, ваша программа должна выбирать зарегистрированные порты в диапазоне 1024-49151. Порты 49152-65535 также можно задействовать свободно - с ними не связаны никакие стандартные службы.

Поле sin_addr структуры sockaddr_in хранит IP-адрес в 4-байтном виде. В зависимости от того, как это поле использовано, оно может представлять и локальный, и удаленный IP-адрес. IP-адреса обычно задают в точечной нотации: a.b.c.d. Здесь каждая буква представляет число для каждого байта и задается слева направо.

Поле sin_zero играет роль простого заполнителя.

Полезная вспомогательная функция inet_addr преобразует IP-адрес точечной нотации в 32-битное длинное целое без знака:

function inet_addr(cp: PChar): u_long; stdcall;.

Поле ср является строкой, заканчивающейся нулевым символом, здесь задается IP-адрес в точечной нотации. Эта функция в качестве результата возвращает IP-адрес, представленный 32-битным числом с сетевым порядком следования байт.

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