Author Topic: Netzwerk/Datentypen Frage  (Read 1700 times)

Offline mangoo

  • Mc. Print
  • *
  • Posts: 32
    • View Profile
    • feuerware.com
Netzwerk/Datentypen Frage
« on: 2010-Oct-15 »
Hallo,

habe jetzt erst seit einigen Tagen glbasic und bin bisher super zufrieden.
Vorher hab ich lange Zeit mit C# programmiert und bin auf glbasic wegen Iphone und Windows Mobile Support gekommen.

Bisher komm ich auch gut klar, jetzt hab ich allerdings eine Frage:

Ich habe in C# einen TCP/IP Server programmiert, die Übertragung erfolgt byte basiert und pro Nachricht schicke ich immer die Länge der Nachricht als Integer, mit einem Byte Array als Daten

int length;
byte[] data;

in diesem byte[] sind jetzt verschiedene Datentypen, wie unsigned int, long, short, byte ........

Das auslesen erfolgt dann so in C#

Code: (glbasic) [Select]
       
protected override bool deserialize()
        {
            PlayerIndex = BinaryReader.ReadByte();
            Time = BinaryReader.ReadInt32();
            Actions = BinaryReader.ReadInt16();
            return true;
        }


Mein Problem ist jetzt, ich weiss nicht wie ich das hier einfach in glbasic umsetzen kann.
Ich hab in den Forenbeiträgen gelesen, dass man einen String mit SOCK_RECV bekommt, dieser aber zum Glück einfach nur ein byte array ist. Soweit so gut, damit komm ich klar.

Jetzt muss ich allerdings in glbasic die entsprechenden byte arrays auswerten und aufstückeln.

Für File auslesen gibt es ja was tolles:

READBYTE, READLONG .......

Aber eben nur für File Operation oder lieg ich da falsch?

Genauso muss ich auch meine Werte wieder in den Socket schreiben.

WRITEBYTE ......


Wie mach ich das jetzt hier am schlausten? Muss ich dafür Inline C Code verwenden?
Ich will vermeiden die Nachricht in eine temporäre Datei zu schreiben und diese dann mit den bequemen READ Funktionen auszulesen bzw zu beschreiben, das wäre doch ein bisschne unprofessionell und langsam :-)


Kann mir da wer helfen?

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10728
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: Netzwerk/Datentypen Frage
« Reply #1 on: 2010-Oct-18 »
Ist nicht so geplant.
Du kannst mit SOCK_RECV aber ein Byte-Feld lesen und dann mit INLINE die Bytes zusammenschneiden und in Dein TYPE übertragen.

Code: (glbasic) [Select]
LOCAL ixd%, time%, act%
SOCK_RECV(... msg$, 12)
INLINE
const char* pC = msg_Str.c_str();
ixd = *((int*)pC); pC +=4; // 4 Byte weiter schieben
time=*(int*)pC); pC+=4;
act=*(short*)pC;
ENDINLINE

Offline mangoo

  • Mc. Print
  • *
  • Posts: 32
    • View Profile
    • feuerware.com
Re: Netzwerk/Datentypen Frage
« Reply #2 on: 2010-Oct-29 »
Ok klasse, das mach ich dann so.

Wie ist das denn mit dem Typ int in c++,  sind das immer 4 Bytes?
Auf Iphone, Windows Mobile ....

Wenn nein, wie kann ich das sicherstellen?

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10728
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Re: Netzwerk/Datentypen Frage
« Reply #3 on: 2010-Nov-10 »
oh. Auf mehreren Platformen müsstest Du auch noch big/little endian beachten usw. :S