А. Григорьев - О чём не пишут в книгах по Delphi

Здесь есть возможность читать онлайн «А. Григорьев - О чём не пишут в книгах по Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: СПб, Год выпуска: 2008, ISBN: 2008, Издательство: БХВ-Петербург, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

О чём не пишут в книгах по Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «О чём не пишут в книгах по Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Рассмотрены малоосвещённые вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные механизмы их работы, особенности для протоколов TCP и UDP и др. Большое внимание уделено разбору ситуаций возникновения ошибок и получения неверных результатов в "простом и правильном" коде. Отдельно рассмотрены особенности работы с целыми, вещественными и строковыми типами данных, а также приведены примеры неверных результатов, связанных с ошибками компилятора, VCL и др. Для каждой из таких ситуаций предложены методы решения проблемы. Подробно рассмотрен синтаксический анализ в Delphi на примере арифметических выражений. Многочисленные примеры составлены с учётом различных версий: от Delphi 3 до Delphi 2007. Прилагаемый компакт-диск содержит примеры из книги.
Для программистов

О чём не пишут в книгах по Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «О чём не пишут в книгах по Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Листинг 2.15. Основная часть сервера SimplestServer

// Начало цикла подключения и общения с клиентом

repeat

ClientSockAddrLen := SizeOf(ClientSockAddr);

// Принимаем подключившегося клиента. Для общения с ним создается новый

// сокет, дескриптор которого помещается в ClientSocket.

ClientSocket :=

accept(MainSocket, @ClientSockAddr, @ClientSockAddrLen);

if ClientSocket = INVALID_SOCKET then

raise ESocketException.Create(

'Ошибка при ожидании подключения клиента: ' + GetErrorString);

// При выводе сообщения не забываем,

// что номер порта имеет сетевой формат

WriteLn(OemString(' Зафиксировано подключение с адреса '),

Ord(ClientSockAddr.sin_addr.S_un_b.s_b1), '.',

Ord(ClientSockAddr.sin_addr.S_un_b.s_b2), '.',

Ord(ClientSockAddr.sin_addr.S_un_b.s_b3), '.',

Ord(ClientSockAddr.sin_addr.S_un_b.s_b4), ':',

ntohs(ClientSockAddr.sin_port));

// Цикл общения с клиентом. Продолжается до тех пор,

// пока клиент не закроет соединение или пока

// не возникнет ошибка

repeat

// Читаем длину присланной клиентом строки и помещаем ее в StrLen

case ReadFromSocket(ClientSocket, StrLen, SizeOf(StrLen)) of

0: begin

WriteLn(OemString('Клиент закрыл соединение');

Break;

end;

-1: begin

WriteLn(OemString('Ошибка при получении данных от клиента: ',

GetErrorString));

Break;

end;

end;

// Протокол не допускает строк нулевой длины

if StrLen <= 0 then

begin

WriteLn(OemString('Неверная длина строки от клиента: '), StrLen);

Break;

end;

// Установка длины строки в соответствии с полученным значением

SetLength(Str, StrLen);

// Чтение строки нужной длины

case ReadFromSocket(ClientSocket, Str[1], StrLen) of

0: begin

WriteLn(OemString('Клиент закрыл соединение'));

Break;

end;

-1: begin

WriteLn(OemString( 'Ошибка при получении данных от клиента: ' +

GetErrorString));

Break;

end;

end;

WriteLn(OemString('Получена строка: ' + Str));

// Преобразование строки

Str :=

AnsiUpperCase(StringReplace(Str, #0, '#0', [rfReplaceAll])) +

' (Simplest server)';

// Отправка строки. Отправляется на один байт больше, чем

// длина строки, чтобы завершающий символ #0 тоже попал в пакет

if send(ClientSocket, Str[1], Length(Str) + 1, 0) < 0 then

begin

WriteLn(OemString('Ошибка при отправке данных клиенту: ' +

GetErrorString));

Break;

end;

WriteLn(OemString('Клиенту отправлен ответ: ' + Str));

// Завершение цикла обмена с клиентом

until False;

// Сокет для связи с клиентом больше не нужен

closesocket(ClientSocket);

until False;

Теперь перейдем к написанию клиента. Пример этого клиента находится на компакт-диске в папке SimpleClient, главное окно показано на рис. 2.4. Клиент должен вызывать только одну функцию, которая реально может блокировать вызвавшую ее нить, — функцию recv. Но по нашему протоколу сервер не посылает клиенту ничего по собственной инициативе, он только отвечает на сообщения клиента. Следовательно, клиент не должен быть всегда готов принять сообщение, он его принимает только после отправки своего. В простых случаях, когда сообщение имеет небольшой размер, а формирование ответа на сервере не требует длительной работы, мы можем считать, что попытка получения ответа от сервера сразу же после отправки ему сообщения в подавляющем большинстве случаев не будет блокировать работу клиента, а оставшееся незначительное количество случаев считаем форс-мажором и допускаем, что в такой ситуации блокирование будет допустимо. На практика заметить это блокирование можно будет только тогда, когда сервер не будет должным образом отвечать на сообщения или связь с ним будет потеряна. Для простого клиента с невысокими требованиями к надежности такое упрощение вполне допустимо и вполне может быть использовано на практике. А в дальнейшем мы познакомимся со средствами библиотеки сокетов, позволяющими писать программы, в которых работа с сокетами никогда не приводит к блокировке.

Рис 24Главное окно программы SimpleClient Таким образом наш клиент будет - фото 21

Рис. 2.4.Главное окно программы SimpleClient

Таким образом, наш клиент будет очень простым: по кнопке Соединитьсяон будет соединяться с сервером, по кнопке Отправить— отправлять серверу сообщение и дожидаться ответа. Третья кнопка, Отсоединиться, служит для корректного завершения работы с сервером. Рассмотрим эти действия подробнее.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «О чём не пишут в книгах по Delphi»

Представляем Вашему вниманию похожие книги на «О чём не пишут в книгах по Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «О чём не пишут в книгах по Delphi»

Обсуждение, отзывы о книге «О чём не пишут в книгах по Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x