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

Занятие 9. Исследование возможностей использования сокетов windows для организации обмена информацией между клиентом и сервером по протоколу тср

В предлагаемой работе рассматриваются функции библиотеки Winsock для работы с протоколами, ориентированными на соединение. Протокол TCP является именно таким протоколом.

Цель работы: исследовать возможности и приемы работы с сокетами Windows при программировании клиент-серверных приложений на основе протокола TCP.

1. Теоретическое введение

В теоретическом введении рассматриваются следующие вопросы:

  • Функции Winsock для протокола TCP.

  • Алгоритм работы Winsock- приложения по протоколу TCP.

1.1. Функции Winsock для протокола tcp

Часть функций библиотеки Winsock рассмотрена в предыдущей работе. Новые функции рассмотрены ниже.

1.1.1. Установление соединения

Установка соединения выполняется на стороне клиента.

function connect(

s: TSocket;

var name: TSockAddr;

namelen: Integer

): Integer; stdcall;

где s - входной параметр. Дескриптор сокета, созданного с помощью функции socket;

name - входной/выходной параметр. Структура sockaddr (адрес уда­ленного сокета). В данном случае IP-адрес и порт сервера;

namelen - входной параметр. Длина структуры sockaddr.

В случае ошибки функция возвращает значение SOCKET_ERROR .

1.1.2. Перевод сокета в режим пассивного ожидания

Перевод сокета в режим пассивного ожидания выполняется на стороне сервера.

function listen(

s: TSocket;

backlog: Integer

): Integer; stdcall;

Где s - входной параметр. Дескриптор сокета, созданного с помощью функции socket;

backlog - длина входной очереди сообщений, то есть сколько сообще­ний может одновременно принять сервер без потери данных. Обычно размер входной очереди равен 5 сообщениям.

1.1.3. Блокирование выполнения программы до тех пор, пока не поступит запрос на установление соединения

Блокирование выполнения программы выполняется на стороне серве­ра.

SOCKET accept (

SOCKET s,

struct sockaddr FAR* addr,

int FAR* addrlen);

function accept(

S: TSocket;

addr: PSockAddr;

addrlen: PInteger): TSocket; stdcall;,

где s - входной параметр. Дескриптор сокета, созданного с помощью функции socket;

addr — входной-выходной параметр. Структура sockaddr. В этой структуре возвращается адрес сокета клиента, который установил соединение с сервером;

addrlen - длина структуры sockaddr.

Функция accept возвращает дескриптор сокета, который будут использовать функции recv и send при приеме-передаче данных клиенту.

1.1.4. Передача данных

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

function send(

s: TSocket;

Vat Buf;

len,

flags: Integer

): Integer; stdcall;,

где s - дескриптор сокета, созданного с помощью функции socket на стороне клиента или полученного при выполнении функции accept на его стороне сервера;

Buf - буфер, содержит передаваемые данные;

Len - длина буфера Buf;

Flags - специальные флаги. Обычно это поле равно 0.

В случае ошибки функция возвращает значение SOCKET_ERROR .

1.1.5. Получение данных по сети

Получение данных по сети поочередно выполняется на стороне и сервера и клиента.

int recv (

SOCKET s,

char FAR* buf,

int len,

int flags);

function recv(

s: TSocket;

var Buf;

len,

flags: Integer): Integer; stdcall;,

где s - дескриптор сокета, созданного с помощью функции socket на сто­роне клиента или полученного в результате выполнения функции accept на стороне сервера;

Buf- выходной параметр. Буфер, куда будут записываться принимаемые по сети данные;

Len - входной параметр. Длина буфера Buf;

Flags - флаги. Обычно это поле равно 0.

В случае ошибки функция возвращает значение SOCKET_ERROR.

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