Wie sind Blitz-Basic Netzwerkpakete aufgebaut?
Übersicht

lordlomexBetreff: Wie sind Blitz-Basic Netzwerkpakete aufgebaut? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo!
Ich möchte einen Blitz-Basic-Client mit einem in python (java-ähnliche Scriptsprache) geschriebenen Server über UDP kommunizieren lasen. Die Verbindung klappt soweit, aber was mir das Blitzbasic-Programm schickt, kann ich nicht auslesen. Gibt es eine Allgemeine regel was rauskommt, nachdem man ein paar readbyte und readint's gemacht hat? womit fängt ein paketinhalt an (also der udp-teil)? Da kommen kryptische zeichen wie '\x05' und '\x00' raus! Kann ich die ersten x zeichen einfach weglesen?? Vielen Dank im Voraus! Gruß Lomex |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://de.wikipedia.org/wiki/U...m_Protocol
Nicht Blitz bestimmt den Aufbau der Pakete. Das Protokoll selbst gibt es vor ![]() |
||
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 |
lordlomexBetreff: meinte ich anders |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also diese Seite kannte ich schon ![]() ich meinte wie die daten IM Paket. nicht den aufbau des headers. womit werden die einzelnen daten (durch writeByte, writeLine oder writeString gesendet) getrennt? was bedeuten die kryptischen ersten zeichen? Was kann ich aus diesen ablesen/welchen sinn haben sie? |
||
![]() |
Smily |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kurze Frage: Was hat Python bitteschön mit Java zutun? egal
Nutz Wireshark, wenn du wissen möchtest, wie ein UDP-Paket aufgebaut ist. Ansonsten: Das musst du garnicht wissen. Es reicht, wenn beide enden wissen, dass es sich um UDP-Handelt. Genau das ist ja der zweck von UDP. |
||
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets "Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!" stummi.org |
lordlomex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Kurze Frage: Was hat Python bitteschön mit Java zutun? egal
Hmmm.. Wenig. War die einzige leicht ähnlich Programmiersprache die mir eingefallen war, um vorzubeugen das wer fragt "was ist python?" - offensichtlich wissen das wenige BB-Fans. Zitat: Nutz Wireshark, wenn du wissen möchtest, wie ein UDP-Paket aufgebaut ist.
Tue ich. Ich verstehe trotzdem nicht, was die seltsamen Sonderzeichen tun. Ich betrachte ja schon nur noch den reinen Inhalt. Ich habe aber gelesen, das dieser nicht im UDP-Protokoll festgelegt ist (wie auch, da hat jedes Programm doch eigene Anforderungen) Zitat: Ansonsten: Das musst du garnicht wissen. Es reicht, wenn beide enden wissen, dass es sich um UDP-Handelt. Genau das ist ja der zweck von UDP.
Das es sich um UDP handelt, wissen beide enden. Daher empfange ich ja auch die Daten. Ich kann sie nur nicht auswerten (bzw in ihre einzenlnen bestandteile zerlegen). |
||
![]() |
tedy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber du weist doch was du sendest...
Nach dem muster kannst du doch auch wieder lesen |
||
01010100 01100101 01000100 01111001 00100000 00111010 01000100 |
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Teste mal Read/WriteLine. Read/Write-Bxte/Int/String sind nur Blitz-Intern. Die Zeichen mit dem \x benutzt Blitz um den Datentyp und die Länge herauszufiltern. (Denke ich mir mal, weil ein String eine variable länge hat und es ja irgendwelche Trennzeichen geben muss). Webserver kannst du mit Readline auslesen. Du solltest es mal so formatieren wie ein Webserver: Writeline stream,"Text"+Chr(10). Welchen Befehl du in Python brauchst weiß ich leider nicht.
MFG |
||
lordlomex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
tedy hat Folgendes geschrieben: Teste mal Read/WriteLine. Read/Write-Bxte/Int/String sind nur Blitz-Intern.
An diese Herangehensweise hatte ich noch nicht gedacht. Danke für den Tipp! Dann muss ich mich um das auslesen und trennen der Infos eben selber kümmern. Es wäre allerdings einfacher, wenn wer weiss, was die Befehler Read/Write-Bxte/Int/String genau tun. Dann könnte ich mein python-Script so gestalten, dass es sich auch nach dem Blitz-Basic-Standard richtet und bräuchte dort nur die üblichen Read-Bxte/Int/String verwenden - String-verarbeitung in BlitzBasic scheint nämlich etwas ...eh... suboptimal zu sein. |
||
![]() |
ZaP |
![]() Antworten mit Zitat ![]() |
---|---|---|
So wie ich das verstehe hast du Probleme beim Auslesen des Streams? Du kannst dir in Python doch z.B. einfach eine ReadInt() funktion machen, die halt 4 bytes aus dem Stream liest (ein int ist 4 bytes lang..) und einen Integer daraus macht. Bytes -> 1 byte, Ints -> 4 bytes, Floats -> 4 bytes, Strings -> Nullterminiert. | ||
Starfare: Worklog, Website (download) |
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verstehe nicht warum es mit WriteString unbedingt benutzen willst und nicht WriteLine... Aber die Größe eines Strings mit WriteString geschreiben ist ((Länge des Strings)+4) Bytes. Ich vermute die 4 Bytes sind/ist die/der Trenner. | ||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Starwar: Die vier Bytes bezeichnen die Länge des Strings ![]() Ich verstehe nicht, warum man für alles unbedingt Read/WriteLine verwenden will. Damit verschenkt man bei grösseren Paketen viel zu viel Platz dafür, dass Ints/Floats zuerst in Strings umgewandelt werden plus noch zwei Bytes Linefeed und Carriage Return pro Zeile. Ausserdem ist es sehr viel performanter, die Ints direkt auszulesen, als zuerst den String einzulesen und nachher in eine Int umzuwandeln. Also, die kryptischen Zeichen sind wohl nichts anderes als die einzelnen Bytes des Ints, die, wenn sie als Text interpretiert werden, halt nur Krimskrams ergeben. Ich kenne mich zwar in Python nicht aus, aber auch da sollte es möglich sein, ein einzelnes Zeichen einzulesen. Bei Read/Writebyte reicht es, dieses Zeichen als Zahl zu interpretieren. Bei Read/Writeint muss man halt vier Zeichen einlesen, diese nochmal Bitshiften und aufsummieren. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, Noobody wenn du es weißt. Meine Behauptungen waren alle nur auf Vermutungen und andern Konzepten aufgebaut. Es waren lediglich Ideen. Und die frage warum nicht WriteLine war nicht rethorisch sondern ernst.
MFG |
||
lordlomex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dank für die vielen Hinweise,
Ich werde dann wohl alles in einen einzelne Zeile packen und mir selbst Trennzeichen ausdenken. Das scheint ja hier die effizienteste Variante zu sein. Damit ist mein Problem wohl geklärt. Gruß Lomex |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist eine absolut unzureichende Variante. Für eine Zahl die 4 Byte brauchen würde brauchst du so gut mal 15 oder mehr Byte, und du brauchst aufwändige Funktionen um das zu interpretieren.
Das BlitzBasic WriteByte tut genau das, was der Name sagt: Es schreibt ein Byte. Einfach nur ein Byte. Kein BlitzBasic-Byte, ein ganz normales Byte. Und WriteInt halt ein Int. WriteString schreibt ein Int und den String, wobei das Int die länge des Strings darstellt. Trennzeichen gibt es nicht(nicht nur bei BlitzBasic), da sie unnötig sind, weil man sich problemlos ein Daten-Format bauen kann, was anhand der Daten-Typen arbeitet. Es ist problemlos möglich, ein mit BB geschriebenes Byte in Python auszulesen. Wenn es bei dir nicht geht, machst du offensichtlich etwas falsch. |
||
lordlomex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein, Nein!
Ich meinte das schon so, dass ich die Integer auch als Integer (also üblicherweise 4 Byte) abspeichere. Trennzeichen werde ich trotzdem verwenden, weil ich es dann nicht nötig habe, eine Stringlänge anzugeben, und außerdem bei einem Fehler beim Schreiben dieser nur 1nen Datensatz betrifft und nicht mein komplettes Auslesen durcheinander bringt. Mein Problem an den Blitz-Basic Befehlen war ja jetzt nur noch, das ich nicht wusste was da am Anfang einer Zeile für seltsame Zeichen eingefügt werden. Ich habe mich jetzt aber für die Variante "selber machen" entschieden, da ich mir so auch eigene Datenstrukturen definieren und für ein effizientes Auslesen ohne das Mitsenden der Datentypen der einzelnen Elemente einsetzen kann. |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn du WriteLine anstelle von WriteString benutzt(ich nehme mal an, das meinst du mit Trennen, also das trennen von belibig langen Strings), hast du ein(bzw. zwei) trennzeichen. Nämlich das CR und LF am ende jeder "zeile". | ||
Gast |
![]() Antworten mit Zitat |
|
---|---|---|
mach es so:
Code: [AUSKLAPPEN] String$ = "String|String2|4BytefürStrings(Int)|String3|Byte|USW"
WriteLine stream,sting |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist Bullshit, Flitztuete, denn es ist katastrophal ineffizient. | ||
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 |
lordlomex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
effizienter gehts doch gar nicht nicht, oder? (die trennzeichen hatte ich ja bereits oben begründet)
btw: kann blitzbasic auch live (!) (in wenigen millisekunden ohne jedes mal eine bibliothek zu laden) verzippen oder ähnliches komprimieren? |
||
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
wahtscheinlich nicht...
du kannst dir das ja selber programmieren. falls es um TCP geht, macht TCP das doch automatisch... da es um udp geht, solltest du das nicht machen, da sonst die performance runtergeht. |
||
Portfolio |LinkedIn |XING |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group