Stream - Was ist das

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

StepTiger

BeitragMi, Jul 25, 2007 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja. Und genau danach wächst dir Petersilie aus den Ohren...

Es ist gar nichts weg. Es wird einfach gesendet. Dann wird es empfangen und muss nur noch von Blitz aus dem Puffer ausgelesen werden. FERTIG!

Alles wird in einen Zwischenpuffer gespeichert. Da wird überhaupt nichts herausgelöscht, bevor es ausgelesen wurde.
Die eigenen Daten kann man auch nicht auslesen, somit braucht man bei einer reinen Peer-to-Peer Verbindung nichts organisieren.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Nooby

BeitragDo, Jul 26, 2007 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich habe jetzt mal ein paar Tests mit folgenden codes gemacht:

Server:
Code: [AUSKLAPPEN]
AppTitle("Server")
server = CreateTCPServer(8080)

If server
 Print "Ok"
Else
 Print "Fehler"
 WaitKey()
 End
EndIf

Repeat

 If Not stream
  stream = AcceptTCPStream(server)
  If stream Then WriteString(stream,"Hab dich!")
 ElseIf ReadAvail(stream)
  lesen$ = ReadString(stream)
  If lesen$ = "schreib"
   WriteString(stream,"isgut")
  ElseIf lesen$ = "schreib2"
   WriteByte(Stream,65)
  EndIf
  Print lesen$
 EndIf

Until KeyHit(1)


Client:
Code: [AUSKLAPPEN]
AppTitle("Client")
stream = OpenTCPStream("127.0.0.1",8080)

If stream
 Print "Ok"
Else
 Print "Fehler"
 WaitKey()
 End
EndIf

Repeat

 If stream
  schreiben$ = Input()
  If schreiben$ = "lesen"
   If ReadAvail(stream)
    Print "-" + ReadString(stream)
   Else
    Print "<kein inhalt>"
   EndIf
  ElseIf schreiben$ = "lesen2"
   If ReadAvail(stream)
    lesen$ = ReadByte(stream)
    Print "-" + lesen$ + "-" + Chr(lesen$)
   Else
    Print "<kein inhalt>"
   EndIf
  Else
   WriteString(stream, schreiben$)
  EndIf
 Else
  Print "Stream geschlossen!"
  WaitKey()
 EndIf

Until KeyHit(1)


Ich bin zu folgenden Ergebnissen gekommen:
1. Jeder hat sein eigenes Postfach.
2. Der Befehl "writebyte" schreibt an das ende des anderen Postfachs ein Byte.
3. Der Befehl "writestring" schreibt zuerst ein Byte mit der länge des Strings, dann drei Bytes mit der Nummer 0 und dann erst den String. Dementsprechend wird auch so mit dem Befehl "readstring" interpretiert. Steht also beim anwenden von "readstring" ein Byte mit der Nummer 0 am Anfang, werden auch 0 Zeichen ausgelesen.

Ich hab nicht alles genau getestet und mir manches dazugedacht, aber das klingt logisch.

Hat jemand Einwände?
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

BladeRunner

Moderator

BeitragDo, Jul 26, 2007 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Die 3 nullen gibt es nur wenn dein String weniger als 256 Zeichen lang ist. Es wird ein 32-Bit-Integer (4Byte) als Größeninfo gesandt. Das kann Dir im Regelfall aber schnurz sein, da diese ja mit Readstring automatisch eingelesen wird.
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

Nooby

BeitragDo, Jul 26, 2007 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Achja: Muss man eigentlich manuell feststellen, ob eine Verbindung noch vorhanden ist? In meinem Programm steht ja
Code: [AUSKLAPPEN]
 If stream
  [...]
 Else
  Print "Stream geschlossen!"
  WaitKey()
 EndIf

aber das funzt wohl nich...

EDIT:
Und wieso habe ich keine Verbindung mehr, wenn ich fälschlicher Weise "readstring" anwende?
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group