Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.038 c
1-1110759398
antoxa
2005-03-14 03:16
2005.03.27
Подскажите на "чем из Delphi" писать для интернет (сервер Linux)


4-1108538439
Гость
2005-02-16 10:20
2005.03.27
Кэш


14-1110025641
TUser
2005-03-05 15:27
2005.03.27
Следить за процессом


8-1102970064
pika
2004-12-13 23:34
2005.03.27
Рисование


1-1111050918
markers
2005-03-17 12:15
2005.03.27
Pass





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский