Читаем О чём не пишут в книгах по Delphi полностью

'Ошибка при ожидании подключения клиента: ' + 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;

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных