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

 LogMessage('Соединение установлено');

 ReadLength:= True;

 Offset:= 0;

 BytesLeft:= SizeOf(Integer);

 repeat

 WaitRes:= WSAWaitForMultipleEvents(3, @FEvents, False, WSA_INFINITE, False);

 case WaitRes of

 WSA_WAIT_EVENT_0: begin

// Закрываем соединение с клиентом и останавливаем нить

LogMessage('Получен сигнал об остановке нити');

 shutdown(FSocket, SD_BOTH);

 Break;

 end;

WSA_WAIT_EVENT_0 + 1:

 begin

// Сбрасываем событие и отправляем данные

 WSAResetEvent(FEvents[1]);

 if not DoSendBuf then Break;

end;

WSA_WAIT_EVENT_0 + 2: begin

// Произошло событие, связанное с сокетом.

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

 if WSAEnumNetworkEvents(FSocket, FEvents[2], NetEvents) = SOCKET_ERROR then

 begin

LogMessage('Ошибка при получении списка событий: ' + GetErrorString);

 Break;

 end;

if NetEvents.lNetworkEvents and FD_READ <> 0 then

begin

if NetEvents.iErrorCode[FD_READ_BIT] <> 0 then

 begin

LogMessage('Ошибка в событии FD_READ: ' +

GetErrorString(NetEvents.iErrorCode[FD_READ_BIT]));

 Break;

 end;

// В буфере сокета есть данные.

// Копируем данные из буфера сокета в свой буфер RecvBuf

 RecvRes:= recv(FSocket, RecvBuf, SizeOf(RecvBuf), 0);

 if RecvRes > 0 then

 begin

 P:= 0;

// Эта переменная нужна потому, что здесь появляется

 // вложенный цикл, при возникновении ошибки в котором нужно

 // выйти и из внешнего цикла тоже. Так как в Delphi нет

// конструкции типа Break(2) в Аде, приходится прибегать

 // к таким способам: если нужен выход из внешнего цикла,

 // во внутреннем цикле выполняется LoopExit:= True,

 // а после выполнения внутреннего цикла проверяется

 // значение этой переменной и при необходимости выполняется

 // выход и из главного цикла.

LoopExit:= False;

// В этом цикле мы извлекаем данные из буфера

// и раскидываем их по приёмникам — Str и StrLen.

 while Р < RecvRes do

 begin

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

 L:= BytesLeft;

// Если в буфере нет такого количества,

 // довольствуемся тем, что есть

 if Р + L > RecvRes then L:= RecvRes — P;

 // Копируем в соответствующий приемник

 if ReadLength then

Move(RecvBuf[P], (PChar(@StrLen) + Offset)^, L)

 else Move(RecvBuf[P], Str(Offset + 1), L);

 Dec(BytesLeft, L);

 // Если прочитали все, что хотели,

 // переходим к следующему

 if BytesLeft = 0 then

 begin

ReadLength:= not ReadLength;

 Offset:= 0;

// Если закончено чтение строки, нужно вывести ее

if ReadLength then

begin

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

 BytesLeft:= SizeOf(Integer);

// Формируем ответ и записываем его в буфер

Str:=

 AnsiUpperCase(StringReplace(Str, #0, '#0',

[rfReplaceAll])) + '(AsyncEvent server)';

 SendString(Str);

 Str:= '';

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

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

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

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

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

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