когда приходит несколько пакетов в одном

Previous  Top  Next

    
 

 

Code:

{ **** UBPFD *********** by kladovka.net.ru ****

>> Разбиение полученных данных через 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;

©Drkb::03565