Avatar billede poulsgaard Praktikant
17. oktober 2007 - 16:26 Der er 3 kommentarer og
1 løsning

Stream til record

Hej eksperter.

Jeg har en Stream (med en DHCP discover) jeg gerne vil have smidt i en record med felter for de værdier der nu ligger i min stream.

Eks. på min record:

TDHCP_Telegram = record
    OP:    Byte;
    HTYPE:  Byte;
    HLEN:  Byte;
    HOPS:  Byte;
    XID:    LongWord;
    SECS:  Word;
    .
    .
  end;

Jeg tænker så at jeg kan sætte lave en pointe til adressen på min stream, og tilgå den som en record. men hvordan gør jeg lige det? og hvordan laver jeg et felt i min record der er 192 bytes stor?

-og er det rigtigt når jeg bruger typen longword til en 32 bit værdi?


Efter de første ca. 230 bytes bliver pakkerne forskellige, alt efter de optioner der nu er tilstede i pakken, så den kan jeg ikke komme så let til, eller er der måske een der har en god ide?

-er der nogle der lige kender til en komponent der kan alt det jeg skal bruge når jeg skal implementere en DHCP server der bl.a. kan bruge option 82?
Avatar billede hrc Mester
17. oktober 2007 - 17:30 #1
Noget i den her retning kan bruges til at mappe en record over en klump hukommelse (ikke testet så måske mangler der en ^ eller en @ - roder altid rundt i det):

type
  TDHCP_Telegram = record
    OP:    Byte;
    HTYPE:  Byte;
    HLEN:  Byte;
    HOPS:  Byte;
    XID:    LongWord;
    SECS:  Word;
    .
    .
  end;

  PDHCP_Telegram = ^TDHCP_Telegram;


var
  Stream: TMemoryStream;
  DHCP_Telegram: PDHCP_Telegram;
begin
  ...
  with DHCP_Telegram(Stream.Memory)^ do
  begin
    eOP.Text := intToStr(OP);
    ...
  end;
end;

Longword er fin men cardinal nok bedre.

Hvad skal din komponent kunne?

Selve streamen er ikke en du genererer vel? Hvis det var ville jeg anbefale mine foretrukne Stream-kompagnoner: TReader og TWriter. De er meget meget anvendelige bare man husker at bruge FlushBuffer!
Avatar billede poulsgaard Praktikant
23. oktober 2007 - 15:45 #2
Streamen kommer fra en Indy-UDP-stream ting på port 67/68.
Jeg bøvler lidt med at få alle dele ud af steam'en, der dette spm.
Avatar billede hrc Mester
23. oktober 2007 - 21:09 #3
Ja, så kan du jo ikke bruge TReader og TWriter. Det første eksempel kan du dog bruge. Her mappes recordstrukturen hen over det data Indy sender.
Avatar billede poulsgaard Praktikant
08. april 2009 - 22:06 #4
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester