Wie sind Blitz-Basic Netzwerkpakete aufgebaut?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Gast

BeitragSo, Feb 15, 2009 20:59
Antworten mit Zitat
Wenn mir jemand eine effizientere methode nennen kann: bitte
Ich wüsste nicht wie.
(Okay, vll noch von dem String jedes Byte einzeleln senden, und mit "|" abschliesen, aber sonst?)

BtbN

BeitragSo, Feb 15, 2009 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Garkeine trennzeichen benutzen? Bytes sind doch immer gleich lang.

Tankbuster

BeitragSo, Feb 15, 2009 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Eben, und wenn man Integer, Floats, Shorts, ect sendet, haben die auch immer eine bestimmte Anzahl an Bytes, bzw Bits Wink
Twitter
Download Jewel Snake!
Windows|Android
 

Gast

BeitragMo, Feb 16, 2009 21:51
Antworten mit Zitat
Aber zwischendrin Stings (Variable grösse) sendet? Dann ist das die einzige möglichkeit?
Oder zumindest nach dem Stiring muss ein Trennzeichen hin.

BladeRunner

Moderator

BeitragDi, Feb 17, 2009 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
strings sendet man eh nullterminiert.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

juse4pro

BeitragDi, Feb 17, 2009 12:58
Antworten mit Zitat
Benutzer-Profile anzeigen
was meint ihr eigentlich mit nullterminiert

heißt es nicht: 4 bytes für länge,dann der string?
also:
Code: [AUSKLAPPEN]

ne 5 als byte
H
A
L
L
O


dann ist schluss??
oder doch keine 4 bytes und dafür nullzeichen?
Portfolio |LinkedIn |XING

BladeRunner

Moderator

BeitragDi, Feb 17, 2009 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nullterminiert bedeutet dass der Compiler solange den string ausliesst bis er auf ein byte mit dem wert 0 trifft. Dann erkennt er den String als beendet.

"Hallo"
würde so (als dezimale Bytewerte) ausgelesen:
72,97,108,108,111,0
Die Null ist im ASCII-Code auch als 'Stringende' definiert.
Siehe dazu auch:
https://www.blitzforum.de/help/ASCII
und
http://de.wikipedia.org/wiki/Ascii
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Tankbuster

BeitragDi, Feb 17, 2009 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Blitz sendet zuerst einen Integer (4Bytes). Dieser gibt die Länge des darauf folgenden Strings an.
Alle Bytes danach bis zu dem vorher ausgelesenen Wert enthalten die ASC-Werte der Chars.
Ein leerer Blitz-String ("") ist demnach sogar noch 4 Bytes groß Wink

Bei Writeline endet die Line mit den beiden Bytes 13 und 10. Alle Bytes davor enthalten ebenfalls die ASC-Werte.

Also wäre "Hallo" bei Blitz:
(als dezimale Bytewerte)
Code: [AUSKLAPPEN]
String: 5,0,0,0,72,97,108,108,111
Line: 72,97,108,108,111,13,10


nullendent -wie Blade es vorschlägt- zu senden wäre z.B. eine gute Möglichkeit. Da könntest du im Vergleich zu einem Blitz-String 3 Bytes pro String sparen Wink

Ich frage mich bis Heute, warum Mark das nicht so gemacht hat.
Twitter
Download Jewel Snake!
Windows|Android

BtbN

BeitragMi, Feb 18, 2009 8:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Die variante mit dem int, welches die länge des strings enthält dürfte dabei allerdings die schnellste sein, da man so nur zwei read-befehle braucht, um den string zu lesen, anstatt einen für jedes byte. Das kann zum Teil einen nicht unerheblichen Geschwindigkeitsvorteil bringen.

Tankbuster

BeitragMi, Feb 18, 2009 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Nja, wenn das so ist, könnte man auch einen Short (2 Bytes) anstatt eines Integers verwenden. Schließlich denke ich nicht, dass jemals ein String 65000+ Zeichen lang sein wird. Wink
Twitter
Download Jewel Snake!
Windows|Android

BtbN

BeitragMi, Feb 18, 2009 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Aufgrund dieses denkens sind schon diverse Overflows und sicherheitslücken entstanden.
 

Gast

BeitragMi, Feb 18, 2009 21:27
Antworten mit Zitat
Dass mit dem 0 Trennzeichen nur hinter strings ist gut.

So mache ich das ab jetzt in Zukunft auch.

Aber BackToTopic: ICh würde mit mit der oben genannenten Version etwas selbst schreiben.
 

BIG BUG

BeitragMi, Feb 18, 2009 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mich BtbN nur anschließen.

Die Länge eines Strings von vornherein zu kennen macht durchaus Sinn, z.B. müsste bei einem Nullterminierten String die Länge aus Performancegründen intern sowieso mitgeschliffen werden.
Außerdem ist es sicherer, da ein unabsichtlich eingefügtes CHR(0) zu Inkonsistenzen in der Datenstruktur führen würde.

Und in einem 32-Bit-System macht die Wahl von 32-Bit-Längenangaben durchaus Sinn Smile.
Die zwei zusätzlichen Byte sind ja wohl lächerlich. Auch in der Netzwerkprogrammierung.

Man sollte lieber versuchen unnötige Pakete zu vermeiden, denn selbst ein leeres Paket hat schon 28-Byte Header. Und ob ein versendeter leerer String 32 oder 29 Byte braucht ist ja nun wirklich egal.
Außerdem muss ja jedes Paket an den Endstationen und diversen Zwischenstellen be- oder verarbeitet werden, was zusätzlich Zeit kostet.

Das mit dem 0-terminiert kann man also getrost vergessen...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group