Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.079 c
14-1109190443
DevPortal
2005-02-23 23:27
2005.03.27
Портал Разработчика (DevPortal)


1-1110732204
Луарвик
2005-03-13 19:43
2005.03.27
Как использовать or?


14-1110439283
Oyster
2005-03-10 10:21
2005.03.27
Бесплатный хостинг с Perl


14-1109934092
Sash
2005-03-04 14:01
2005.03.27
nbtstat -r


8-1102433128
Sergonoid
2004-12-07 18:25
2005.03.27
LineTo или рисование по мм?




   Наверх