Wie sind Blitz-Basic Netzwerkpakete aufgebaut?
Übersicht

Gast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Garkeine trennzeichen benutzen? Bytes sind doch immer gleich lang. | ||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eben, und wenn man Integer, Floats, Shorts, ect sendet, haben die auch immer eine bestimmte Anzahl an Bytes, bzw Bits ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Gast |
![]() 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. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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ß ![]() 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 ![]() Ich frage mich bis Heute, warum Mark das nicht so gemacht hat. |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aufgrund dieses denkens sind schon diverse Overflows und sicherheitslücken entstanden. | ||
Gast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group