Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с передачей файлов по сети, TServerSocket / TClientSocket 
V
    Опции темы
cmL
Дата 26.3.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



Написал приложение для передачи фалов по сети с помощью TServerSocket и TClientSocket. Всё работает, но есть одно НО... Во время передачи среднего размера фалов (5 и более Mb) клиент зависает до окончания передачи. Я уверен, что это из-за того, что для передачи и принятия файла в оперативной памяти выделяется размер = размеру передаваемого файла. Помогите решить проблему, либо подскажите другой надёжный способ передачи.
 
P.S. Написал я это приложение на основе этой статьи
PM MAIL   Вверх
kami
Дата 28.3.2009, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



1. Используй не TMemoryStream, а TFileStream.
2. Очень смущает 
Код

Size := ServerSocket1.Socket.Connections[0].SendBuf(P^, MS.Size);

В реальных условиях не будет такого, чтобы 5 и более мегабайт отправились сразу за 1 send. Значит, нужно будет использовать "досылку" данных в сокет, когда он передаст первую часть данных. А в примере не используется событие OnClientWrite (буфер сокета свободен и в него можно добавить данные).
2. Статья  не освещает некоторые вопросы. Прочитай эту статью, по крайней мере раздел "Почему несколько блоков при передаче могут обьединяться в один" - обязательно.
PM MAIL WWW   Вверх
cmL
Дата 28.3.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



kami, спасибо большое советы.

Это сообщение отредактировал(а) cmL - 28.3.2009, 20:29
PM MAIL   Вверх
kami
Дата 28.3.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(cmL @  28.3.2009,  19:14 Найти цитируемый пост)
А вот статья - полный бред, с кучей ошибок

Статья не бред, а вот насчет кода - соглашусь, есть такое. Но с другой стороны это заставляет подумать головой, чтобы заставить всё хозяйство работать smile

Самое главное, что оттуда можно подчерпнуть (ну, по крайней мере я подчерпнул smile ) - это принцип работы с TCP - нужно буферизировать данные и на передающем и на приемном конце, иначе ничего хорошего не выйдет.


Цитата(cmL @  28.3.2009,  19:14 Найти цитируемый пост)
сам повозился с пол-часа

Это очень хорошо, что всего с пол-часа, большая удача для изучения чужого кода smile. Зато разобрался, что к чему.
PM MAIL WWW   Вверх
cmL
Дата 28.3.2009, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.3.2009

Репутация: нет
Всего: нет



Да всё в порядке smile . Я конкретно лоханулся со своей статьей: передавать файлы с помощью MemoryStream, гг это ж надо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0927 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.