ReceiveNetworkData()

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

ReceiveNetworkData()

Beitrag von Batze »

Wenn ich in etwa so einen Code habe:

Code: Alles auswählen

Datenmenge = ReceiveNetworkData(EventClientNumber(), DatenBuffer, #Laenge)
Wie kriege ich dann, wenn Datenmenge=#Laenge herraus ob noch Daten da sind, oder exakt #Laenge Bytes empfangen wurden?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
emptee
Beiträge: 10
Registriert: 13.09.2004 11:44
Wohnort: Dortmund
Kontaktdaten:

Beitrag von emptee »

Im ersten Fall ist NetworkClientEvent = 2, im 2. Fall = 0.

Aber Vorsicht, auch 0 bedeutet nicht, daß Du schon alles hast, es kann durchaus noch was kommen, was nur noch nicht bei Dir angekommen ist.

Daher ist es unabdingbar, sich über ein geeignetes Übertragungsprotokoll Gedanken zu machen.

ciao, Mario
http://www.surfkraft.de - instrumental surf weblog
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

emptee hat geschrieben:Im ersten Fall ist NetworkClientEvent = 2, im 2. Fall = 0.
Das ganze läuft Serverseitig, wie du an EventClientNumber() hättest erkennen können.

PS: Du immer mit deinen Protokollen :wink: [size=0]Darauf werde ich schon achten.[/size]
Zuletzt geändert von Batze am 07.02.2006 16:47, insgesamt 1-mal geändert.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
emptee
Beiträge: 10
Registriert: 13.09.2004 11:44
Wohnort: Dortmund
Kontaktdaten:

Beitrag von emptee »

Also dann:

Im ersten Fall ist NetworkServerEvent = 2, im 2. Fall = 0.

Ja, und das mit den Protokollen ist bei zustandslosen Verbindungen
nun mal leider zwingend.

ciao, Mario
http://www.surfkraft.de - instrumental surf weblog
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

emptee hat geschrieben:Aber Vorsicht, auch 0 bedeutet nicht, daß Du schon alles hast, es kann durchaus noch was kommen, was nur noch nicht bei Dir angekommen ist.
Hm... und ich habe gedacht, dass bei 0 alles empfangen wurde :|
Wie sollte man dann am Besten den Code gestalten, damit alle Daten korrekt empfangen werden?

Mfg DerProgger
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Schön wäre es natürlich wenn ReceiveNetworkData() nicht abstürzen würde, wenn man es aufruft und keine Daten da sind. :freak:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

Mit den Funktionen NetworkClientEvent() bzw. NetworkServerEvent() sollte auch vorher geprüft werden, ob Daten zum Empfangen vorhanden sind.

Mfg DerProgger
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Irgendwie verstehe ich dein Problem zu deiner Frage nicht.

Code: Alles auswählen

Datenmenge = ReceiveNetworkData(EventClientNumber(), DatenBuffer, #Laenge) 
sagt doch alles.
das ergebnis von receivenetworkdata() ist die Länge der empfangenen Daten die in den DatenBUffer geschrieben wurden. Wie in der Hilfe steht bedeutet wenn die Datenmenge = #Laenge ist, das noch mehr Daten empfangen wurden und abgerufen werden müssen. Es kann natürlich sein, das bei Datenmenge = #Laenge keine weiteren Daten anliegen, wenn zufällig alle Daten in den Buffer paßten.

receifenetwordata wird wohl normal auch nicht abstürzen, es sei denn du machst einen Speicherfehler. der Datenbuffer muß natürlich vorher allociert werden, in der richtigen größe.

evntclientnumber() sollte aber nicht direkt eingesetzt werden.
Am besten immer event und clientid in einer variablen speichern. Da bisher keiner sagen konnte wie die Funktionen intern arbeiten könnte es sein, das die clientid seit abfragen des serverevents schon wieder geändert wurde.

was für ein Problem hast du denn genau?

Gruß
Toshy
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Friedrichs hat geschrieben:receifenetwordata wird wohl normal auch nicht abstürzen, es sei denn du machst einen Speicherfehler.
Doch es stürzte immer ab, wenn keine Daten mehr da waren.
Friedrichs hat geschrieben: evntclientnumber() sollte aber nicht direkt eingesetzt werden.
Am besten immer event und clientid in einer variablen speichern.
Klar, war ja hier auch nur ein Beispiel.
Im Programm läuft das eh anders. 8)

Mein Problem liegt eben darin, dass es viel leichter wäre alle Daten zu lesen, wenn es keine Fehlermöglichkeit gäbe. :freak:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

du scheinst du version pb4beta zu nutzen.
wollte das jetzt mal testen. programmiere zwar gerade mit dem netzwerk, habe es aber noch nicht unter pb4 gtestet.
CreateNetworkServer(7777) läuft bei mir nicht mehr, es wird gemeckert das ich eine falsche anzahl parameter nutze.
erweitere ich ume inen parameter geht es. was soll den das? ich habe in der readme.htm nichts gelesen über eine änderung.

Toshy
Gesperrt