Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Сети > Проблема с передачей файлов по сети |
Автор: cmL 26.3.2009, 13:32 |
Написал приложение для передачи фалов по сети с помощью TServerSocket и TClientSocket. Всё работает, но есть одно НО... Во время передачи среднего размера фалов (5 и более Mb) клиент зависает до окончания передачи. Я уверен, что это из-за того, что для передачи и принятия файла в оперативной памяти выделяется размер = размеру передаваемого файла. Помогите решить проблему, либо подскажите другой надёжный способ передачи. P.S. Написал я это приложение на основе http://www.winsov.ru/delphi062.php. |
Автор: kami 28.3.2009, 12:37 | ||
1. Используй не TMemoryStream, а TFileStream. 2. Очень смущает
В реальных условиях не будет такого, чтобы 5 и более мегабайт отправились сразу за 1 send. Значит, нужно будет использовать "досылку" данных в сокет, когда он передаст первую часть данных. А в примере не используется событие OnClientWrite (буфер сокета свободен и в него можно добавить данные). 2. Статья не освещает некоторые вопросы. Прочитай http://www.delphimaster.ru/articles/socksrv/index.html по крайней мере раздел "Почему несколько блоков при передаче могут обьединяться в один" - обязательно. |
Автор: cmL 28.3.2009, 19:14 |
kami, спасибо большое советы. |
Автор: kami 28.3.2009, 20:29 |
Статья не бред, а вот насчет кода - соглашусь, есть такое. Но с другой стороны это заставляет подумать головой, чтобы заставить всё хозяйство работать ![]() Самое главное, что оттуда можно подчерпнуть (ну, по крайней мере я подчерпнул ![]() Это очень хорошо, что всего с пол-часа, большая удача для изучения чужого кода ![]() |
Автор: cmL 28.3.2009, 20:34 |
Да всё в порядке ![]() |