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

 

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

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

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

 

functionSendText (consts: string): integer,

 

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

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

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

 

functionSendBuf (varbuf; bufsize: integer; flags: integer): integer,

 

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

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

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

 

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

 

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

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

 

functionReceiveText: string.

 

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

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

 

functionReceiveBuf(varbuf; bufsize: integer; flags: integer): integer,

 

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

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

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

 

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

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

 

functionReceiveLength: integer.

 

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

 

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

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

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

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

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