Hehe... står selv og arbejde med dataoverførelse (Sovsekoder knows)... dog til et lidt andet formål samt en anden problem stilling, ikke desto mindre er nogle af tingene oppe og vende, så du kan evt. kigge forbi:
http://www.eksperten.dk/spm/712020From time to time, for at se hvad jeg fx finder ud af, ligeledes vil jeg da lige lytte med her som gensidig inspiration...
Jeg står dog nok over for et "stører" redesign, da jeg indtil nu har kørt PooledThreads via. Delegates, hvilket måske skal laves om til at jeg selv stører alt omkring denne Pool.
Desuden er ideer oppe at vende omkring at en tråd godt kan tage sig af at sende filer til X antal klienter. osv osv...
Endelig, Sovsekoder nævner i starten det at putte info i en filheader, det er hvad jeg selv gør, og kan lige outline din info jeg smider i henholdsvis Header samt Frames
Header:
byte[] SyncBlok: 12 byte (%01010101)
string HeaderIndikatior: 8 byte ("NTCPHEAD", UTF-8)
long FrameAntal: 8 byte (Antallet af "blokke" filen er delt op i)
long PakkeStørelse: 8 byte (Den totale mængde af bytes der skal overføres ex. headeren)
long FilStørelse: 8 byte (Filens størelse i bytes)
uint PakkeID: 4 byte (En pakkes ID, benytter selv CRC til dette, men ikke ud fra filens data)
uint FilID: 4 byte (Filens ID, hvis filen har sådan et)
ushort FrameStørelse: 2 byte (størelsen på en Frame, max 65KB)
byte[] Padding: 8 byte (For at en header passer med 64 byte)
Frame:
byte[] SyncBlok: 12 byte (%01010101)
long FrameNummer: 8 byte (Nummeret på framen, 0,1,2,3 osv op til det totale antal af frames)
uint PakkeID: 4 byte (En referance til hvilken pakke denne fil tilhører)
ushort DataStørelse: 2 byte (Mængden af faktiske bytes i framen, da framen er af statisk størelse i mit ekempel, så skal man kunne frasotere overskydende data i sidste frame)
byte[] Datablokken: x byte (Den data som der skal overføres)