Вверх ↑
Этот топик читают: Гость
Ответов: 209
Рейтинг: 1
#1: 2015-03-12 00:46:51 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:38:10
карма: 0

0
Ответов: 655
Рейтинг: 18
#2: 2015-03-12 01:16:09 ЛС | профиль | цитата
Net2Com, пример накидать не могу, температура, рубит.

Передать файл с заголовком:

Считываешь файл, далее StreamToStr, далее склеиваешь через разделитель данные в виде файл.тхт;ыаыввфа24ыаы23аываыв2аываыаыа - тело файла в строковом представлении, далее StrToStream, пакуешь файловый поток, отправляешь.

Не получится передать файл, чтобы не увеличивался объем используемой памяти.
Но можно файл передавать побайтово, допустим по 500байт, считал 500 байт- передал, принимающая сторона получила 500 байт записала на диск. и т.д. в этом случае у тебя грубо говоря фиксированный объем в 500 байт всегда и ты не сжираешь оперативку.

Это так, на быстрый взгляд.


карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#3: 2015-03-12 08:46:37 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2022-09-20 00:15:09
карма: 0

0
Ответов: 4628
Рейтинг: 749
#4: 2015-03-12 14:06:37 ЛС | профиль | цитата
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

0
Ответов: 209
Рейтинг: 1
#5: 2015-03-19 16:39:11 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:38:21
карма: 0

0
Ответов: 4628
Рейтинг: 749
#6: 2015-03-19 16:59:07 ЛС | профиль | цитата
Если идёт запись и чтение в разных потоках - нужно ставить компонент SafeMode. В зависимости от способа использования стрима, можно поставить размер заведомо больше, тогда не должно быть лишних выделений памяти (вроде).
карма: 26

0
Ответов: 209
Рейтинг: 1
#7: 2015-03-19 18:18:40 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:38:26
карма: 0

0
Ответов: 4628
Рейтинг: 749
#8: 2015-03-19 18:33:35 ЛС | профиль | цитата
Пробуй не делать doClear, а перед doSaveToStream делай doPosition(0) и подкорректируй размер стрима под размер последних данных. doClear освобождает выделенную память, а без doPosition стрим будет постоянно увеличиваться в размерах.
Кроме того doPosition(0) нужно и перед doCompress.
карма: 26

1
Голосовали:Net2Com
Ответов: 209
Рейтинг: 1
#9: 2015-03-19 18:52:44 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:38:31
карма: 0

0
Ответов: 209
Рейтинг: 1
#10: 2015-03-21 14:13:04 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:38:35
карма: 0

0
Ответов: 4628
Рейтинг: 749
#11: 2015-03-21 15:54:43 ЛС | профиль | цитата
В этой схеме не вижу никакого смысла в параллельных потоках. Кроме того, события Timer происходят в основном потоке.
Убери потоки и по одному удаляй обрабатывающие компоненты/части начиная с конца. Начни с TCP_Client, потом ZLIB, Jpeg, MemoryStream. Найдешь в каком компоненте ошибка.
карма: 26

0
Ответов: 209
Рейтинг: 1
#12: 2015-03-21 19:05:02 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:38:46
карма: 0

0
Ответов: 4628
Рейтинг: 749
#13: 2015-03-21 19:08:19 ЛС | профиль | цитата
Net2Com писал(а):
в обязательном порядке ставить надо на схемах
Ставить только там, где необходимо. Это будет следствием того, что пользователь понимает что и для чего он делает.
Net2Com писал(а):
однозначно tcp глючный
И я так говорю. Попробуй поставь стандартный в мою схему передачи файла - при попытке отправить 100 Мб файл клиент зависает. Сервер при этом получит около 30 Мб.
карма: 26

0
Ответов: 209
Рейтинг: 1
#14: 2015-03-21 23:49:02 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:38:50
карма: 0

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)