Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ **** UBPFD *********** by delphibase.endimus.com **** >> Разбиение полученных данных через ClientSocket и ServerSocket, когда приходит несколько пакетов в одном. При получении нескольких данных по socket иногда приходят два и более пакета в одном. Здесь пример, как разбить при получении полученную строку на несколько отправленных. Зависимости: System, ScktComp Автор: cyborg, cyborg1979@newmail.ru, ICQ:114205759, Бузулук Copyright: Собственное написание (Осипов Евгений Анатольевич) Дата: 23 мая 2002 г. ***************************************************** } {Разделитель строк, добавляется в конец отсылаемых данных, можно написать любой, какой нравится/какой вам подойдёт} constDelitel: 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);