Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...

Разбиение полученных данных через ClientSocket и ServerSocket, когда приходит несколько пакетов в одном

Советы » Сеть » Разбиение полученных данных через ClientSocket и ServerSocket, когда приходит несколько пакетов в одном

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Разбиение полученных данных через ClientSocket и ServerSocket,
когда приходит несколько пакетов в одном.

При получении нескольких данных по socket иногда приходят два и более пакета в одном.
Здесь пример, как разбить при получении полученную строку на несколько отправленных.

Зависимости: System, ScktComp
Автор:       cyborg, cyborg1979@newmail.ru, ICQ:114205759, Бузулук
Copyright:   Собственное написание (Осипов Евгений Анатольевич)
Дата:        23 мая 2002 г.
***************************************************** }

{Разделитель строк, добавляется в конец отсылаемых данных,
можно написать любой, какой нравится/какой вам подойдёт}
const

Delitel: string

= #13#10; {Процедура обработки строк, S-передаваемая строка, Socket - Передаваемый сокет откуда пришли данные} procedure

Process_Message(var

S: AnsiString; var

Socket: TCustomWinSocket); begin

{Обрабатываем здесь полученные данные S из сокета Socket} end

; {Обработака события по получению данных из ClientSocket, а так же действенно и для ServerSocket} procedure

TMyForm.ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); var

S1, S2: AnsiString; I: Integer; begin

S1 := Socket.ReceiveText; {Присваиваем S1 полученную строку из Socket} I := 0; repeat

{Разделяем строку, если одновременно пришло несколько} I := Pos(Delitel, S1); {Ищем раздлелитель Delitel в строке S1} if

I <> 0 then

{Если найден делитель, тогда ... Если не найден, то вы не добавили в конце отсылаемой строки Delitel !} begin

S2 := Copy(S1, 1, I - 1); {Копируем одну пришедшую строку в S2} Delete(S1, 1, I + Length(Delitel) - 1); {Удаляем уже скопированную строку} Process_Message(S2, Socket); {Вызываем процедуру обработки полученных строк, где S2 наша выделенная строка} end

; until

I = 0; {Повторять, пока будет не найден разделитель Delitel} end

;

Пример использования:

// При посылке данных в socket нужно
// не забывать прибавлять разделитель строк:
Socket.SendText('Отправляемая строка' + Delitel);

// или
S := 'Отправляемая строка' + Delitel;
Socket.SendText(S);

// или
S := 'Отправляемая строка';
Socket.SendText(S + Delitel);

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com