Главная страница
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.025 c
3-1108834138
Sirruf
2005-02-19 20:28
2005.03.27
Форматирование текста в TColumn


3-1108848665
TheEd
2005-02-20 00:31
2005.03.27
Есть ли компоненты для визуализации таблиц много-ко-многим


1-1110906643
Oleg_
2005-03-15 20:10
2005.03.27
Обратное построение древа


6-1106656964
Separator
2005-01-25 15:42
2005.03.27
WM_RASDIALEVENT


14-1109856022
saNat
2005-03-03 16:20
2005.03.27
Помогите найти сервер для ICQ