Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа Socket EK-07.doc
Скачиваний:
3
Добавлен:
15.08.2019
Размер:
212.99 Кб
Скачать

Передача и прием сообщений

Для решения поставленной задачи рекомендуется использовать неблокирующие сокеты. При этом операции приема/передачи сообщений будут происходить асинхронно и не останавливать выполнение программного кода. У клиентского сокета свойство ClientType должно иметь значение ctNonBlocking, а у серверного сокета свойству ServerType нужно присвоить значение stNon-Blocking.

Для передачи сообщений служат функции SendText и SendBuf:

Функция SendText посылает текстовое сообщение s через сокет:

function SendText (const s: string): integer,

где s - передаваемое сообщение.

Возвращаемый параметр – количество отосланных байт, в случае ошиб-ки результат равен –1.

Функция SendBuf посылает буфер через сокет. Буфером может являться любой тип, например структура (record) или integer:

function SendBuf (var buf; bufsize: integer; flags: integer): integer,

где buf - передаваемые данные;

bufsize – размер данных, предназначенных для передачи;

flags – параметр передачи данных (рекомендуется приравнять к нулю).

Возвращаемое значение – количество отосланных байт, в случае ошибки результат равен –1.

Для получения сообщений используются функции ReceiveText и Re-ceiveBuf:

Функция ReceiveText получает сообщения в виде текстовой строки и вызывается без параметров:

function ReceiveText: string.

Эта функция возвращает полученную строку.

Функция ReceiveBuf получает сообщения через буфер. Как и у функции SendBuf, буфером функции ReceiveBuf может являться любой тип:

function ReceiveBuf(var buf; bufsize: integer; flags: integer): integer,

где buf – полученные данные;

bufsize – размер принятых данных;

flags – параметр передачи данных (рекомендуется принять равным 0).

Возвращаемое значение – количество полученных байт, в случае ошибки результат равен –1.

Узнать размер полученных данных можно, вызвав следующую функцию:

function ReceiveLength: integer.

Возвращаемое значение – количество полученных байт.

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

Варианты заданий

  1. Организовать взаимодействие типа клиент - сервер. Клиент делает запрос серверу о наличии файлов с определенным расширением из указанной директории. Сервер сканирует указанную директорию и отправляет клиенту список файлов, удовлетворяющих запросу.

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: Сервер должен удалить из текста все слова, длина которых меньше N символов. N-задается вручную.

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: Сервер возвращает текст, слова, которого отсортированы в алфавитном порядке.

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: Сервер возвращает только те слова, в которых гласных больше чем согласных.

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: Сервер кодирует текст в азбуку Морзе.

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: на сервер отправляется текст выровненный по левому краю. Сервер выравнивает текст по ширине, то есть и по левому, и по правому краю, увеличив в каждом не пустой строке (кроме последних строк абзацев) количество пробелов между словами, начиная с первого пробела в строке (ширину текста считать равной 50).

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: Серверу отправляется текст и отдельно символ, задаваемый вручную. Сервер возвращает только те слова, которые начинающиеся и заканчивающиеся этой буквой (как большой, так и малой)

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: Серверу передаются текс содержащий абзацы и число N. Сервер должен удалить из текста абзац под номером N (абзацы отделяются друг от друга одной или несколькими пустыми строками и нумеруются от 1) .

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: Серверу передаются текс и число N. Сервер возвращает текс содержащий, только те слова, длина которых равно числу N.

  1. Организовать взаимодействие типа клиент - сервер. Клиент отправляет серверу некоторый текст произвольной длины. Серверная часть выполняет его обработку и возвращает результат клиенту: символ, который больше всего встречается в тексте (в виде А-134), и символ который меньше всего встречается в тексте (в виде Ю-14).

8