Когда приходит несколько пакетов в одном
01.01.2007
{ **** 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;