AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdTCPServer Byte Packets (Indy10)
Thema durchsuchen
Ansicht
Themen-Optionen

TIdTCPServer Byte Packets (Indy10)

Ein Thema von DArc · begonnen am 9. Okt 2011 · letzter Beitrag vom 30. Okt 2011
 
DArc

Registriert seit: 3. Jun 2009
48 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: TIdTCPServer Byte Packets (Indy10)

  Alt 11. Okt 2011, 16:12
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:
Code:
2
0
1
0
77
0
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
Ich würde gerne die Welt verändern, doch Gott hat
vergessen mir die Quellcodes zu geben ... !

Geändert von DArc (11. Okt 2011 um 16:16 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz