Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Поиск подстроки в контенте принятом TClientSocket   Найти похожие ветки 

 
SergP ©   (2005-03-16 08:25) [0]

Нужно искать последовательность определенных символов в процессе приема данных, и в случае нахождения их оборвать конект.

Ясно что искать их в каждом принятом пакете отдельно не правильно, так как нужная подстрока может оказаться разрезаной на 2 пакета.
"Складировать" принятый контент в переменной string
s:=s+socket.ReceiveText;

и поиск в ней тоже делать нехорошо, так как постоянное увеличения размера S  вызывает тормоза (может и незаметные, но все же тормоза).

Сразу устанавливать длину S исходя из максимально возможного размера всего контента, а потом в нужные места вставлять содержимое принятых пакетов - тоже не совсем хорошо.

Как это сделать правильно?


 
Reindeer Moss Eater ©   (2005-03-16 08:37) [1]

Если в очередном принятом пакете нет и намека на начало подстроки, то можно и не конкатенировать этот блок с общей строкой (если не хочешь искать по всем принятым данным)
Ну или по крайней мере можно корректировать начальную позицию поиска.


 
Digitman ©   (2005-03-16 09:25) [2]


> Как это сделать правильно?


пересмотреть "с нуля" прикладной протокол инф.обмена между кл. и серв., так чтобы принимающая сторона впредь не занималась такой неблагодарной работой


 
SergP.   (2005-03-16 10:43) [3]


> пересмотреть "с нуля" прикладной протокол инф.обмена между
> кл. и серв., так чтобы принимающая сторона впредь не занималась
> такой неблагодарной работой


Дело в том что серверная часть - это сервер в инете, причем не мой. Принимаемый контент - это текст HTML-странички.  
Можно принять страничку всю, а потом произвести поиск, но я хочу уменьшить трафик, обрывая конект если нужная мне часть принята.


 
Юрий Зотов ©   (2005-03-16 11:06) [4]

> SergP

1. > "Складировать" принятый контент в переменной string
  > s:=s+socket.ReceiveText;
  > и поиск в ней тоже делать нехорошо, так как постоянное
  > увеличения размера S  вызывает тормоза (может и
  > незаметные, но все же тормоза).

2. > Дело в том что серверная часть - это сервер в инете,

То есть, Вы принимаете данные из Инета и при этом опасаетесь, что перераспределение памяти под строку будет тормозить программу?

ИМХО, это то же самое, что опасаться, что положенная в автомобиль дамская сумочка будет увеличивать его вес.

Если уж и бороться с тормозами в программе, то явно не в этом месте.


 
SergP.   (2005-03-16 13:24) [5]

Я не говорю что у меня есть тормоза в программе и я с ними борюсь, просто думаю что не стоит делать тормоза, пусть даже и не заметные.
А перераспределение памяти под строку, которая может быть длиной до 90 Кб, причем много раз (мелкими "порциями") - это ИМХО нехорошо, поэтому и решил на всякий случай посоветоваться с более опытными людьми. Вернее сказать просто мне эта часть кода:
s:=s+socket.ReceiveText;
очень не нравится... Хотя если уж Вы говорите что это нормально, то я вынужден поверить что там все нормально.


 
Digitman ©   (2005-03-16 13:27) [6]


> мне эта часть кода:
> s:=s+socket.ReceiveText;
> очень не нравится


и мне тоже.

мало ли что передатчик надумает передавать !

например, хрен знает что размером в 4Гб и более ...



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
9-1104767109
FRick
2005-01-03 18:45
2005.03.27
GLScene_манипуляция ланшавтом!


1-1110828527
Гость
2005-03-14 22:28
2005.03.27
Подскажите, как вставить данные из формы в Word?


3-1109755842
Slaga
2005-03-02 12:30
2005.03.27
Выполнение двух запросов одновременно ?


8-1102352715
vnavigator
2004-12-06 20:05
2005.03.27
Как правильно отображать в TListView 32 -битные иконки


1-1110561555
avlan
2005-03-11 20:19
2005.03.27
Ошибка записи в файл