когда приходит несколько пакетов в одном
Falk0ner, вс, 06/07/2008 - 15:35.
когда приходит несколько пакетов в одном
{ **** 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;
>> Разбиение полученных данных через 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;
Отправить комментарий