Вниз
Скачать: 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.024 c
1-1110801075
lehich
2005-03-14 14:51
2005.03.27
добавить небольшой exe в проект и использование его


1-1110818082
nes
2005-03-14 19:34
2005.03.27
Связь 2-х компов....


3-1109158923
Muchacho
2005-02-23 14:42
2005.03.27
Вычисляемые поля


1-1110814646
Дельфин
2005-03-14 18:37
2005.03.27
Нахождение алгоритма распределения числа


1-1110796437
Developerr
2005-03-14 13:33
2005.03.27
RadioGroup




   Наверх