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

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

{ **** UBPFD *********** by kladovka.net.ru ****
>> Разбиение полученных данных через ClientSocket и ServerSocket, .
При получении нескольких данных по socket иногда приходят два и более пакета в одном.
Здесь пример, как разбить при получении полученную строку на несколько отправленных.
Зависимости: System, ScktComp
Автор: cyborg, <a href="mailto:cyborg1979@newmail.ru">cyborg1979@newmail.ru</a>, 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;

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...