Этот топик читают: Гость
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-16 13:38:10 |
|||
карма: 0 |
|
Ответов: 655
Рейтинг: 18
|
|||
Net2Com, пример накидать не могу, температура, рубит.
Передать файл с заголовком: Считываешь файл, далее StreamToStr, далее склеиваешь через разделитель данные в виде файл.тхт;ыаыввфа24ыаы23аываыв2аываыаыа - тело файла в строковом представлении, далее StrToStream, пакуешь файловый поток, отправляешь. Не получится передать файл, чтобы не увеличивался объем используемой памяти. Но можно файл передавать побайтово, допустим по 500байт, считал 500 байт- передал, принимающая сторона получила 500 байт записала на диск. и т.д. в этом случае у тебя грубо говоря фиксированный объем в 500 байт всегда и ты не сжираешь оперативку. Это так, на быстрый взгляд. |
|||
карма: 0 |
|
Гость
Ответов: 17029
Рейтинг: 0
|
|||
Редактировалось 4 раз(а), последний 2022-09-20 00:15:09 |
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Net2Com, я же тебе давал пример. Что там не так?
------------ Дoбавленo в 14.06: Поскольку многих интересует этот вопрос, предложу такой вариант: Send files over TCP 2015-05-19.zip 1) Сервер поместить в пустой каталог, запустить. 2) Запустить клиент, добавить в список файлы для отправки, нажать Send All. Полученные сервером файлы сохраняются рядом с ним с оригинальными именами. Множественные соединения для сервера не предусмотрены. Файлы до 4 Гб летят на ура. Используются: - Альтернативные TCP компоненты (стандартные глючат) - Компонент DataAccumulator (накопление фрагментарных данных с удобным определением разделителей или данных указанной длины). У кого уже был - обновитесь: исправлены ошибки. - Модифицированный DataToFile (для считывания с файла строки указанной длины без дополнительных разделителей) Редактировалось 2 раз(а), последний 2016-10-17 11:58:56 |
|||
карма: 26 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-16 13:38:21 |
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Если идёт запись и чтение в разных потоках - нужно ставить компонент SafeMode. В зависимости от способа использования стрима, можно поставить размер заведомо больше, тогда не должно быть лишних выделений памяти (вроде).
|
|||
карма: 26 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-16 13:38:26 |
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Пробуй не делать doClear, а перед doSaveToStream делай doPosition(0) и подкорректируй размер стрима под размер последних данных. doClear освобождает выделенную память, а без doPosition стрим будет постоянно увеличиваться в размерах.
Кроме того doPosition(0) нужно и перед doCompress. |
|||
карма: 26 |
| ||
Голосовали: | Net2Com |
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-16 13:38:31 |
|||
карма: 0 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-16 13:38:35 |
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
В этой схеме не вижу никакого смысла в параллельных потоках. Кроме того, события Timer происходят в основном потоке.
Убери потоки и по одному удаляй обрабатывающие компоненты/части начиная с конца. Начни с TCP_Client, потом ZLIB, Jpeg, MemoryStream. Найдешь в каком компоненте ошибка. |
|||
карма: 26 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-16 13:38:46 |
|||
карма: 0 |
|
Ответов: 4628
Рейтинг: 749
|
|||
Net2Com писал(а): в обязательном порядке ставить надо на схемахNet2Com писал(а): однозначно tcp глючный |
|||
карма: 26 |
|
Ответов: 209
Рейтинг: 1
|
|||
Редактировалось 1 раз(а), последний 2020-02-16 13:38:50 |
|||
карма: 0 |
|
14