Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПоиск подстроки в контенте принятом 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.044 c