Вверх ↑
Этот топик читают: Гость
Ответов: 59
Рейтинг: 0
#1: 2020-12-19 11:29:45 ЛС | профиль | цитата
Всем доброго дня. Возможно реализовать скачивание файла с локального сервера? Какие элементы лучше использовать и какой метод для передачи? Нашел хорошие компоненты https://forum.hiasm.com/topic/63600 но там есть только передать файл с сервера клиентам. А как сделать наоборот, чтобы клиенты сами скачивали конкретный файл?

Редактировалось 1 раз(а), последний 2020-12-19 11:30:06
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 59
Рейтинг: 0
#2: 2020-12-19 14:08:11 ЛС | профиль | цитата
Есть такой вариант, не не могу понять как сохранить целостность файла. Имя файла и размер сохраняются, а вот сам файл уже оказывается негодным.
Add(MainForm,4609994,343,252){
Left=20
Top=105
Width=384
Height=273
Caption="Сервер"
link(onCreate,3150418:doOpen,[(502,293)(502,356)])
}
Add(TCP_Server,3150418,630,350)
{
Port=7788
DataType=3
link(onRead,2485292:doCopyFromStream,[])
link(Data,7701222:Stream,[])
}
Add(FileStream,2485292,707,336)
{
Mode=1
AutoCopy=0
Point(doCopyFromStream)
link(FileName,1604621:Result,[])
}
Add(FileStream,7339923,574,224)
{
link(onLoad,7701222:doCopy,[])
}
Add(Button,14321239,497,364)
{
Left=30
Top=75
Caption="Отправить"
link(onClick,14485910:doEvent1,[(541,370)(541,377)])
}
Add(Button,14436560,413,224)
{
Left=30
Top=45
Caption="Открыть"
link(onClick,5652688:doExecute,[])
}
Add(ODialog,5652688,462,224)
{
link(onExecute,595716:doText,[])
}
Add(ChildFormEx,15245145,539,140)
{
}
BEGIN_SDK
Add(EditMultiEx,200278,3,3)
{
Width=538
Height=298
}
Add(MainForm,15337811,21,105)
{
Left=35
Top=105
Caption="Клиент"
link(onCreate,3295449:doOpen,[(159,146)(159,244)])
}
Add(FileStream,2485292,462,224)
{
Mode=1
AutoCopy=0
Point(doCopyFromStream)
link(FileName,10758309:Result,[])
}
Add(ODialog,8168554,224,140)
{
link(onExecute,4551523:doText,[])
}
Add(Button,6645864,245,252)
{
Left=30
Top=75
Caption="Отправить"
link(onClick,14093667:doEvent1,[])
}
Add(FileStream,7339923,315,140)
{
link(onLoad,11953822:doCopy,[])
}
Add(Button,14436560,175,140)
{
Left=30
Top=45
Caption="Открыть"
link(onClick,8168554:doExecute,[])
}
Add(TCP_Client,3295449,371,238)
{
Port=7788
IP="127.0.0.1"
DataType=3
link(onRead,2485292:doCopyFromStream,[])
link(Data,11953822:Stream,[])
}
Add(MemoryStream,11953822,378,140)
{
}
Add(Edit,4551523,273,140)
{
Left=95
Top=45
Width=180
Text=""
link(onChange,7339923:doOpen,[])
}
Add(Hub,14093667,315,252)
{
link(onEvent1,6056381:doSplit,[(341,258)(341,226)(261,226)(261,195)])
link(onEvent2,3295449:doSend,[(350,265)(350,258)])
}
Add(MultiStrData,6056381,273,189)
{
Char="\"
Direct=1
link(Str,4551523:Text,[])
link(onPart1,10758309:doStrCat,[(369,195)(369,181)])
}
Add(StrCat,10758309,462,175)
{
Str1="C:\Users\lamdo\Pictures\"
}
END_SDK
Add(MemoryStream,7701222,630,224)
{
}
Add(InfoTip,12418447,518,126)
{
Info=#6:Клиент|
Width=92
Height=53
}
Add(InfoTip,11787122,406,203)
{
Info=#6:Сервер|
Width=358
Height=200
}
Add(Edit,595716,518,224)
{
Left=100
Top=40
Width=180
Text=""
link(onChange,7339923:doOpen,[])
}
Add(Hub,14485910,553,371)
{
OutCount=3
link(onEvent1,5029369:doSplit,[(579,377)(579,339)(506,339)(506,300)])
link(onEvent2,3150418:doSend,[(599,384)(599,370)])
}
Add(MultiStrData,5029369,518,294)
{
Char="\"
Direct=1
link(Str,595716:Text,[])
link(onPart1,1604621:doStrCat,[(614,300)(614,286)])
}
Add(StrCat,1604621,707,280)
{
Str1="C:\Users\lamdo\Pictures\"
}

Редактировалось 1 раз(а), последний 2020-12-19 14:08:34
карма: 0

0
Ответов: 263
Рейтинг: 18
#3: 2020-12-20 06:18:27 ЛС | профиль | цитата
Схема не моя. Модифицируйте под свои нужды.
Add(MainForm,68161,511,266)
{
Left=21
Top=106
Width=345
Height=197
Caption="Сервер - клиент"
link(onCreate,9973059:doEvent1,[])
}
Add(Edit,7298692,308,357)
{
Left=5
Top=95
Width=145
Text="Пример текста"
link(onEnter,10742204:doEvent1,[])
}
Add(StreamPack,14434465,511,350)
{
DataCount=#10:тип данных|6:данные|0:|
link(onPack,7240964:doSend,[])
link(данные,12524206:Data,[(524,337)(499,337)(499,393)(461,393)])
}
Add(StreamUnPack,13235102,721,336)
{
DataCount=#10:тип данных|6:данные|0:|
link(onUnPack,4233687:doEvent,[])
}
Add(TCP_Server,6739532,672,336)
{
Port=111
DataType=3
link(onRead,13235102:doUnPack,[])
}
Add(TCP_Client,7240964,595,336)
{
Port=111
IP="127.0.0.1"
DataType=3
}
Add(Hub,9973059,553,280)
{
link(onEvent1,6739532:doOpen,[(644,286)(644,342)])
link(onEvent2,7240964:doOpen,[(581,293)(581,342)])
}
Add(IndexToChanel,4233687,777,336)
{
Count=4
Point(Index)
Point(Data)
link(onEvent1,9252309:doFileName,[(874,342)(874,223)])
link(onEvent2,958573:doCopy,[(889,349)(889,181)])
link(onEvent3,4456694:doAdd,[])
link(Index,13235102:тип данных,[(783,324)(768,324)(768,384)(727,384)])
link(Data,13235102:данные,[(790,319)(762,319)(762,380)(734,380)])
}
Add(ChanelToIndex,12524206,455,350)
{
Count=3
Point(Data)
link(onIndex,14434465:doPack,[])
}
Add(FileStream,2227522,308,308)
{
link(onLoad,15407374:doData,[])
}
Add(Button,7328284,168,301)
{
Left=10
Top=10
Caption="Файл"
link(onClick,774689:doExecute,[])
}
Add(ODialog,774689,217,301)
{
Title="файл для отправки данных"
link(onExecute,10529649:doEvent1,[])
}
Add(DoData,15407374,364,308)
{
link(onEventData,12524206:doWork2,[(412,314)(412,363)])
link(Data,2227522:Stream,[(370,296)(351,296)(351,351)(314,351)])
}
Add(SDialog,9252309,966,210)
{
Title="сохранить принятые данные в файл"
Point(doFileName)
link(onExecute,15993375:doValue,[])
}
Add(MemoryStream,958573,917,175)
{
link(onCopy,9252309:doExecute,[(957,181)(957,216)])
}
Add(FileStream,968047,1022,273)
{
Mode=2
Point(doCopyFromStream)
link(FileName,15993375:Value,[])
}
Add(Memory,15993375,1022,210)
{
link(onData,329189:doData,[(1072,216)(1072,316)(908,316)(908,279)])
}
Add(DoData,329189,917,273)
{
link(onEventData,5559598:doEvent1,[])
link(Data,958573:Stream,[])
}
Add(Hub,5559598,980,273)
{
OutCount=3
link(onEvent1,968047:doOpen,[])
link(onEvent2,968047:doCopyFromStream,[(1012,286)(1012,293)])
link(onEvent3,968047:doClose,[(1012,293)(1012,286)])
}
Add(Label,13327372,980,350)
{
Left=190
Top=10
Width=90
Color=12639424
Caption="принятый текст:"
AutoSize=1
}
Add(RichEdit,4456694,931,350)
{
Left=170
Top=30
Width=150
Height=125
Color=12639424
ScrollBars=2
}
Add(Label,7520253,448,266)
{
Left=10
Top=40
Width=137
Height=17
Caption="---------------------"
}
Add(Hub,10529649,259,301)
{
OutCount=3
link(onEvent1,10690890:doPart,[(283,307)(283,272)])
link(onEvent2,2227522:doOpen,[])
link(onEvent3,2227522:doClose,[])
}
Add(Hub,661063,371,266)
{
link(onEvent1,7520253:doText,[])
link(onEvent2,12524206:doWork1,[(421,279)(421,356)])
}
Add(FilePartElm,10690890,308,266)
{
link(onPart,661063:doEvent1,[])
}
Add(Button,5178758,245,406)
{
Left=5
Top=120
Caption="Текст"
link(onClick,15097737:doData,[])
}
Add(DoData,15097737,308,406)
{
link(onEventData,10742204:doEvent2,[(359,412)(359,377)])
link(Data,7298692:Text,[])
}
Add(Hub,10742204,378,364)
{
InCount=2
OutCount=1
link(onEvent1,12524206:doWork3,[])
}
Add(InfoTip,9835884,413,406)
{
Info=#121:На какую ножку подаш сигнал с такой и снимеш|0:|0:|102:Тип подаваемых данных не имеет значение, так как они упаковываются\распаковываются в поток \ из потока|
Transparent=1
HAlign=0
Width=505
Height=102
Margin=10
}
Add(InfoTip,6691684,287,231)
{
Info=#17:Передатчик файлов|
Width=148
Height=123
}
Add(InfoTip,7348943,861,133)
{
Info=#15:Приемник файлов|
Width=225
Height=193
}

Редактировалось 1 раз(а), последний 2020-12-20 07:07:53
карма: 3

0
Ответов: 697
Рейтинг: 143
#4: 2020-12-20 12:20:00 ЛС | профиль | цитата
LeoN писал(а):
А как сделать наоборот, чтобы клиенты сами скачивали конкретный файл?

В локальной сети можно создать общую сетевую папку с правами только на чтение, и клиенты пусть скачиваю как обычный файл по ссылке типа \\Server\Share\yourfile (можно прописать права доступа).
Если нужно через интернет то, можно создать FTP-сервер , примеры FTP- клиентов есть в Hiasm.

Редактировалось 2 раз(а), последний 2020-12-20 12:21:17
карма: 15

0
Ответов: 4621
Рейтинг: 746
#5: 2020-12-21 12:00:55 ЛС | профиль | цитата
Gunta писал(а):
можно создать FTP-сервер , примеры FTP- клиентов есть в Hiasm.
Можно и HTTP сервер, тоже компоненты наличествуют.

А чтобы реализовать на основе TCP клиента-сервера, нужно дополнить свой протокол обмена. Клиент посылает условную команду "скачать файл" с параметром "имя файла". Сервер ожидает такую команду, при получении - отправляет указанный файл.
карма: 26

0
Ответов: 59
Рейтинг: 0
#6: 2020-12-25 16:16:31 ЛС | профиль | цитата
fox-video, Спасибо. Отличный пример! Забрал себе для модификации!)
карма: 0

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