ich habe jetzt aber ein problem mit dem auslesen des packets ...
Delphi-Quellcode:
procedure TForm1.ServerExecute(AContext: TIdContext);
type
TMyPacket = packed record
id: Byte;
length: Byte;
username: array[0..15] of AnsiChar;
{
int0: integer;
long0: Longint;
int1: integer;
nbyte0: byte;
nbyte1: byte;
nbyte2: byte;
nbyte3: byte;
}
end;
var ByteBuffer: TIdBytes;
begin
AContext.Connection.IOHandler.ReadBytes(ByteBuffer, SizeOf(tmypacket));
BytesToRaw(ByteBuffer, mypacket, SizeOf(tmypacket));
end;
nehmen wir mal ein ganz leichtes beispiel, also das mit dem kleinsten packet:
ich empfange: id (byte), length of username (byte), username (string)
sample: id=0x02(login packet), length of username=1, weil username=77(Zeichen "M" als
ASCII-Code)
ich gebe das ganze mit folgendem code aus:
Delphi-Quellcode:
Log.Lines.Add(IntToStr(mypacket.id));
Log.Lines.Add(IntToStr(mypacket.length));
aus dem beispielcode resultiert folgendes:
heißt: ich konnte zwar die bytes auslesen, jedoch landen die alle im mypacket.id und für length ist nix mehr übrig, geschweige denn für username
achja ehe ich es vergesse:
ich empfange überhaupt nichts, solange ich in dieser zeile SizeOf(TMyPacket) stehen habe ...
Delphi-Quellcode:
// ...
AContext.Connection.IOHandler.ReadBytes(ByteBuffer, SizeOf(tmypacket));
// ...
bei mir steht ne zahl drin (irrelevant welche, hauptsache: zahl<=byte, im prinzip logisch da ich immer nur ein byte empfange), kurz:
Delphi-Quellcode:
// ...
AContext.Connection.IOHandler.ReadBytes(ByteBuffer, SizeOf(byte));
// ...
meine fragen noch kurz zusammengefasst:
warum kann ich mein Record nicht vollständig füllen?
warum empfange ich keine werte bei SizeOf(TMyPacket)?
Mfg DArc