Netspirit писал(а):
Assasin, не совсем понял, зачем в твоей схеме три связи на отправку. Как мне кажется, нужно сначала сформировать поток в памяти с упаковкой всех необходимых атрибутов, затем один раз выполнить doSend.Netspirit, я использую что-то типа самопального протокола:
1. Сначала отправляется пакет с id = 0 и именем файла (сюда же можно атрибуты)
2. Отправляются куча последовательных пакетов с id = 1, куском данных (4096 байт или меньше) и размером переданного куска (чтобы если до конца файла меньше 4кб, то принимающая сторона не заполнила нулями остаток файла у себя)
3. Отправляется пакет с id = 2, означающий конец передачи файла.
Netspirit писал(а):
Глянул коды. Как я понял, при dtStream, первые 4 байта указывают на размер передаваемого файла.Да, только не файла, а потока данных. Передавать можно что угодно, но вот этот тип dtStream - это уже можно сказать протокол поверх TCP.
Вообще как сейчас сделаны компоненты для работы по протоколу TCP мне не очень нравится: различные типы передачи данных (dtString, dtStream, dtInteger) мне кажутся больше похожими на костыли. Я думаю, не стоило делать еще один слой абстракции, а сделать просто три компонента: TCP_Client, TCP_Server (лучше реализацией контейнера, как в TCP_ServerEx), StreamRW. Первые два просто бы работали чисто с протоколом TCP и предоставляли пользователю по нижней точки безразмерный поток данных (Stream), с которым уже можно работать с помощью StreamRW (что-то вроде DataToFile, только для безразмерных потоков данных). Как раз StreamRW и должен был бы считывать/записывать различные типы данных (строки, штатные Stream, числа и т.д.).
------------ Дoбавленo в 13.14:
Интересные там в клиенте строчки кстати:
#pas
0: _hi_OnEvent(_event_onRead,integer(buf^));
2: _hi_OnEvent(_event_onRead,real(buf^));



Поиск
Друзья
Администрация