Передача и прием сообщений
Для решения поставленной задачи рекомендуется использовать неблокирующие сокеты. При этом операции приема/передачи сообщений будут происходить асинхронно и не останавливать выполнение программного кода. У клиентского сокета свойство 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).