Вверх ↑
Этот топик читают: Гость
Ответов: 1343
Рейтинг: 31
#1: 2014-02-22 14:24:30 ЛС | профиль | цитата
Netspirit писал(а):
Прием в Stream - не вижу никаких сложностей (исп. DataToFile). Передача из стрима - в примерах предложено конвертировать стрим в строку. Если предполагается передавать большие файлы (больше 100 Мб), можно в схеме сделать чтение стрима небольшими частями.




stream передаёт ВСЁ ЧЁ ЕМУ СКАЖЕШЬ от и до ЦЕЛИКОМ
а STR передаёт так же НО КУСКАМИ (куски зависят от скорости интернета)
а то вот что то str накопителя просто невидно нигде скоко раз уже пытался его делать и нивкакую нормального не получается

Netspirit писал(а):
конвертировать стрим в строку

самому не смешно?

я вот как то не особо думаю что TCP передаст все символы
проще уж в HEX
карма: 2

0
Ответов: 4631
Рейтинг: 749
#2: 2014-02-22 14:32:27 ЛС | профиль | цитата
Rysik писал(а):
самому не смешно?

СМЕШНО:

Rysik писал(а):
stream передаёт ВСЁ ЧЁ ЕМУ СКАЖЕШЬ от и до ЦЕЛИКОМ
а STR передаёт так же НО КУСКАМИ (куски зависят от скорости интернета)
Бред. Данные передаются по TCP пакетами которые на протяжении всего маршрута собираются/разделяются в различных буферах и приходят в систему фрагментами из нескольких пакетов, которые мы и видим в событии onReceive. В любом случае данные идут набором байт, а откуда эти байты - из стрима или строки - не имеет значения.

Rysik писал(а):
я вот как то не особо думаю что TCP передаст все символы
Ну так погугли. Или хотя бы попробуй примеры компонентов в части отправки файлов.
карма: 26

0
Ответов: 1343
Рейтинг: 31
#3: 2014-02-22 14:37:43 ЛС | профиль | цитата
Netspirit писал(а):
Бред. Данные передаются по TCP пакетами которые на протяжении всего маршрута собираются/разделяются в различных буферах и приходят в систему фрагментами из нескольких пакетов, которые мы и видим в событии onReceive. В любом случае данные идут набором байт, а откуда эти байты - из стрима или строки - не имеет значения.


вот и моё мнение о написанном такое же...

попробуй передать файл размером более 1мб через стрим и через HEX str с ФОРМАТИРОВАНИЕМ этого файла в скобки {4D0000}

посмотрим что тебе выплюнет STR
карма: 2

0
Ответов: 4631
Рейтинг: 749
#4: 2014-02-22 14:39:46 ЛС | профиль | цитата
Ну, давай схемку. Найду твою ошибку - поставлю пару минусов.
карма: 26

0
Ответов: 1343
Рейтинг: 31
#5: 2014-02-22 14:45:07 ЛС | профиль | цитата
Netspirit писал(а):
Ну, давай схемку



code_33141.txt


Netspirit писал(а):
Найду твою ошибку - поставлю пару минусов.

1 ошибка 1 минус
карма: 2

0
файлы: 1code_33141.txt [1KB] [363]
Ответов: 4631
Рейтинг: 749
#6: 2014-02-22 14:52:09 ЛС | профиль | цитата
Ну, так давай для начала посмотрим, что у тебя выплюет dtStream, а?
карма: 26

0
Ответов: 1343
Рейтинг: 31
#7: 2014-02-22 15:01:50 ЛС | профиль | цитата
Netspirit писал(а):
Ну, так давай для начала посмотрим, что у тебя выплюет dtStream, а?


пхах уже смотрел всё работает у него отлично! передаётся файл идеально от и до!
карма: 2

0
Ответов: 4631
Рейтинг: 749
#8: 2014-02-22 15:13:08 ЛС | профиль | цитата
Схему сюда. С одной кнопкой, на которую нужно нажать и увидеть, что работает.
карма: 26

0
Ответов: 1343
Рейтинг: 31
#9: 2014-02-22 15:29:29 ЛС | профиль | цитата
вот это работает 100% и выходной файл можно использовать...

вот переделал немного покрасивше

Add(MainForm,12292430,21,14)
{
}
Add(TCP_Server,5164519,182,154)
{
Port=25500
DataType=3
link(onConnect,5164519:doSend,[(229,167)(229,201)(173,201)(173,174)])
link(Data,13694100:Var1,[(188,75)])
}
Add(TCP_Client,9869978,182,210)
{
Port=25500
IP="127.0.0.1"
DataType=3
link(onRead,4272301:doRead,[])
}
Add(Hub,10355875,140,203)
{
link(onEvent1,5164519:doOpen,[(168,209)(168,160)])
link(onEvent2,9869978:doOpen,[])
}
Add(Image,15500712,294,210)
{
Left=25
Top=35
Align=5
}
Add(BitmapStream,14596104,329,98)
{
link(Stream,13694100:Var2,[])
link(Bitmap,8995776:Bitmap,[(342,86)(276,86)(276,142)(209,142)])
}
Add(Button,325837,42,98)
{
Left=230
Top=225
Width=75
TabOrder=-1
link(onClick,312596:doCapture,[])
}
Add(MemoryStream,14061641,329,35)
{
Point(doPosition)
}
Add(Hub,2906662,252,98)
{
OutCount=4
link(onEvent1,14061641:doClear,[(290,104)(290,48)])
link(onEvent2,14596104:doWrite,[])
link(onEvent3,14061641:doPosition,[(298,118)(298,55)])
link(onEvent4,10355875:doEvent1,[(278,125)(278,167)(128,167)(128,209)])
}
Add(GetDataEx,13694100,329,70)
{
link(Data,14061641:Stream,[])
}
Add(BitmapStream,4272301,231,210)
{
link(onRead,15500712:doLoad,[])
}
Add(ScreenShort,312596,91,98)
{
link(onCapture,9625340:doEvent1,[])
link(Handle,10231968:Value,[])
}
Add(Bitmap,8995776,203,84)
{
}
Add(Hub,9625340,147,98)
{
link(onEvent1,8995776:doLoad,[(182,104)(182,90)])
link(onEvent2,2906662:doEvent1,[(207,111)(207,104)])
}
Add(Memory,10231968,91,42)
{
Default=Integer(0)
}

и вот через STR

Add(MainForm,12292430,21,14)
{
}
Add(TCP_Server,5164519,182,154)
{
Port=25500
link(onConnect,5164519:doSend,[(229,167)(229,201)(173,201)(173,174)])
link(Data,3372792:FString,[(188,133)(454,133)])
}
Add(TCP_Client,9869978,182,210)
{
Port=25500
IP="127.0.0.1"
link(onRead,15617355:doSearch,[])
}
Add(Hub,10355875,140,203)
{
link(onEvent1,5164519:doOpen,[(168,209)(168,160)])
link(onEvent2,9869978:doOpen,[])
}
Add(Image,15500712,385,210)
{
Left=25
Top=35
Align=5
}
Add(BitmapStream,14596104,329,98)
{
link(Stream,4264750:Var2,[])
link(Bitmap,8995776:Bitmap,[(342,86)(276,86)(276,142)(209,142)])
}
Add(Button,325837,42,98)
{
Left=230
Top=225
Width=75
TabOrder=-1
link(onClick,312596:doCapture,[])
}
Add(MemoryStream,14061641,329,35)
{
Point(doPosition)
}
Add(Hub,2906662,252,98)
{
OutCount=5
link(onEvent1,14061641:doClear,[(290,104)(290,48)])
link(onEvent2,14596104:doWrite,[])
link(onEvent3,14061641:doPosition,[(298,118)(298,55)])
link(onEvent4,10506516:doConvert,[(332,125)(332,41)])
link(onEvent5,10355875:doEvent1,[(278,132)(278,170)(128,170)(128,209)])
}
Add(BitmapStream,4272301,329,210)
{
link(onRead,15500712:doLoad,[])
}
Add(ScreenShort,312596,91,98)
{
link(onCapture,9625340:doEvent1,[])
link(Handle,10231968:Value,[])
}
Add(Bitmap,8995776,203,84)
{
}
Add(Hub,9625340,147,98)
{
link(onEvent1,8995776:doLoad,[(182,104)(182,90)])
link(onEvent2,2906662:doEvent1,[(207,111)(207,104)])
}
Add(Memory,10231968,91,42)
{
Default=Integer(0)
}
Add(BlockFind,15617355,231,210)
{
IncludeBlock=1
StartBlock="{"
EndBlock="}"
link(onSearch,13296561:doConvert,[])
}
Add(StreamConvertor,13296561,280,210)
{
Mode=1
link(onResult,4272301:doRead,[])
}
Add(StreamConvertor,10506516,399,35)
{
link(onResult,3372792:doString,[])
link(Data,4264750:Var3,[(405,23)(365,23)(365,75)])
}
Add(FormatStr,3372792,448,35)
{
DataCount=1
Mask="{%1}"
Point(FString)
}
Add(GetDataEx,4264750,329,70)
{
link(Data,14061641:Stream,[])
}

ну и теперь посмотрим кто из нас прав
карма: 2

0
файлы: 1code_33143.txt [462B] [268]
Ответов: 4631
Рейтинг: 749
#10: 2014-02-22 16:53:21 ЛС | профиль | цитата
Разбираться в остальных схемах не буду. Вот первая твоя схема с типом dtStream:
code_33144.txt

Вопрос:
1) Какой максимальный размер файла можно передать этой схемой если у меня, например, 512 Мб оперативной памяти?
2) На основании чего сделан вывод, что при dtStream через сеть данные идут одной порцией? Это к "а STR передаёт так же НО КУСКАМИ".
карма: 26

0
файлы: 1code_33144.txt [1.4KB] [374]
Ответов: 1343
Рейтинг: 31
#11: 2014-02-23 10:38:17 ЛС | профиль | цитата
Netspirit писал(а):
Вот первая твоя схема с типом dtStream:


ПРОСТО ВОЗЬМИ 2 СХЕМЫ выше в посте и ВНИМАТЕЛЬНО ПОСМОТРИ какие и как пакеты передаются..

я неговорю что это да то кусками просто видимо у STREAM есть свой собиратель а у STR нет...
карма: 2

0
Ответов: 4631
Рейтинг: 749
#12: 2014-02-23 12:03:59 ЛС | профиль | цитата
А вот теперь видно просветление: "у STREAM есть свой собиратель". А не "кусками", "целиком". Знание этого позволяет принимать правильное решение при создании схемы.
Возвращаясь к самому первому вопросу почему не добавить тип Stream - потому что считаю более целесообразным обрабатывать отдельные фрагменты из onReceive.
code_33151.txt

В реальных схемах не стоит передавать файл таким образом как в представленных выше схемах (нет нормального контроля за началом/окончанием передачи). Обычно при взаимодействии клиента и сервера разрабатывается примитивный протокол, в котором используются управляющие последовательности, показывающие начало/конец файла, его размер, повтор передачи с места разрыва и т.д.

Раз уж Rysik кажется понял в чем суть - обещанные минусы ставить не буду, но впредь, перед любым высказыванием на любую тему перепроверяй свои утверждения.
карма: 26

0
файлы: 1code_33151.txt [3.7KB] [349]
Ответов: 1343
Рейтинг: 31
#13: 2014-02-23 12:44:36 ЛС | профиль | цитата
ну блин система вот эта вся состоит из команд и передачи файлов и ничего более..

СХЕМУ надо собрать на 1 ПОРТУ STR так как если ставим STREAM то теряем мультиклиентность
а если ставим STR то теряем передачу файлов!

теперь думаю понятно почему такой вопрос возник
--------------------------------------------------------
но как бы вопрос уже слетел сам собой (поставил надёжный вариант rghost) тут и считай файл большой будет то можно спокойно отключиться от клиента и ждать пока он сам потихоньку прогрузит файл а потом его просто найти по масочке

да и как то это удобнее
карма: 2

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