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 }
|