wasp писал(а):
Нужно переслать бинарник по TCP сокету частями по 4 килобайта.Если не секрет, почему именно частями по 4 kb?
Просто поделить файл на части недостаточно. Для его сборки нужна дополнительная информация (имя файла, размер файла для проверки, смешение части файла, возможно, контрольную сумму.)
Набросал небольшие схемы, не всё идеально, но для начала пойдёт.
Сервер (запускать первым)
Add(MainForm,11176470,182,217)
{
Left=20
Top=105
Width=380
Height=161
Caption="Receive file"
Position=1
Point(onClose)
link(onCreate,37674:doOpen,[])
link(onClose,37674:doClose,[])
}
Add(TCP_Server,37674,245,231)
{
Port=130
DataType=3
Point(onError)
Point(onProgress)
link(onRead,12923094:doSeparateMT,[])
link(onConnect,10294395:doOn,[(284,244)(284,307)])
link(onDisconnect,10294395:doOff,[(298,251)(298,300)])
}
Add(StreamUnPack,5706248,357,231)
{
DataCount=#8:FileName|8:Filepart|8:PartSize|8:FileSize|8:Position|
link(onUnPack,16532332:doEvent1,[])
}
Add(MT_MultiData,12923094,308,231)
{
Count=1
link(onData1,5706248:doUnPack,[])
}
Add(LED,10294395,308,287)
{
Left=315
Top=85
}
Add(FileStream,4065350,546,231)
{
Mode=1
Point(doCopyFromStream)
Point(doPosition)
link(FileName,5706248:FileName,[(552,208)(468,208)(468,278)(363,278)])
}
Add(Hub,16532332,420,231)
{
OutCount=4
link(onEvent1,4065350:doOpen,[])
link(onEvent2,15520801:doData,[(473,244)(473,258)])
link(onEvent3,15675089:doCopy,[(445,251)(445,342)])
link(onEvent4,4065350:doClose,[(452,258)(452,251)(480,251)(480,244)])
}
Add(StreamCopy,15675089,546,336)
{
link(Dest,4065350:Stream,[])
link(Source,5706248:Filepart,[(559,327)(370,327)])
link(Count,5706248:PartSize,[(566,320)(377,320)])
}
Add(DoData,15520801,497,252)
{
link(onEventData,4065350:doPosition,[])
link(Data,5706248:Position,[(503,222)(412,222)(412,271)(391,271)])
}
Add(FileStream,16236154,273,98)
{
link(onLoad,9790843:doFor,[])
}
Add(StreamCopy,9519870,147,280)
{
Count=4096
link(onCopy,8314133:doPack,[])
link(Dest,7365015:Var2,[])
link(Source,16236154:Stream,[(160,138)(279,138)])
}
Add(MemoryStream,13204596,147,210)
{
}
Add(DropFile,6373852,133,98)
{
link(onDropFile,1668532:doValue,[])
}
Add(For,9790843,336,98)
{
Step=4096
link(onEvent,15192085:doEvent1,[(375,104)(375,83)(88,83)(88,272)])
link(End,10049041:Var3,[(349,89)(328,89)(328,145)])
}
Add(Memory,1668532,182,98)
{
link(onData,10733663:doEvent1,[])
}
Add(WinTools,7758873,581,126)
{
link(Handle,11176470:Handle,[])
}
Add(Hub,250598,637,70)
{
link(onEvent1,52372:doOpen,[(690,76)(690,90)])
link(onEvent2,7758873:doPopup,[(662,83)(662,111)(571,111)(571,139)])
}
Add(MainForm,11176470,581,70)
{
Left=20
Top=105
Width=377
Height=134
Caption="Send file"
Position=1
Point(onClose)
Point(Handle)
link(onCreate,250598:doEvent1,[(627,90)(627,76)])
link(onClose,52372:doClose,[])
}
Add(TCP_Client,52372,700,84)
{
Port=130
IP="127.0.0.1"
DataType=3
Point(onError)
Point(onProgress)
link(onConnect,10294395:doOn,[(739,97)(739,111)])
link(onDisconnect,10294395:doOff,[])
}
Add(StreamPack,8314133,259,280)
{
DataCount=#8:FileName|8:Filepart|8:PartSize|8:FileSize|8:Position|
link(onPack,52372:doSend,[(669,286)(669,104)])
link(FileName,2362305:GetData,[(265,246)(244,246)])
link(Filepart,7365015:Var3,[(272,257)])
link(FileSize,10049041:Var2,[])
link(Position,720744:Value,[])
}
Add(GetDataEx,10049041,280,140)
{
link(Data,16236154:Size,[])
}
Add(FilePartElm,15176478,182,168)
{
link(onPart,2362305:doData,[])
link(FileName,1668532:Value,[])
}
Add(EventFromData,2362305,238,168)
{
link(onEvent,15176478:doPart,[(277,174)(277,160)(172,160)(172,174)])
}
Add(Hub,15192085,98,266)
{
OutCount=3
link(onEvent1,720744:doValue,[(277,272)(277,216)])
link(onEvent2,13204596:doClear,[(123,279)(123,223)])
link(onEvent3,9519870:doCopy,[])
}
Add(Memory,720744,287,210)
{
Point(Data)
link(Data,16236154:Position,[])
}
Add(Hub,10733663,238,98)
{
link(onEvent1,16236154:doOpen,[])
link(onEvent2,16236154:doClose,[])
}
Add(GetDataEx,7365015,147,252)
{
link(Data,13204596:Stream,[])
}
Add(Label,12195882,119,357)
{
Left=465
Top=140
Align=5
Font=[MS Sans Serif,12,0,0,1]
Caption="Перетащите на форму файл для отправки"
AutoSize=1
Alignment=2
}
Add(LED,10294395,756,91)
{
Left=320
Top=60
}