Seite 1 von 2

ReceiveNetworkData()

Verfasst: 07.02.2006 16:20
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?

Verfasst: 07.02.2006 16:24
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

Verfasst: 07.02.2006 16:38
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]

Verfasst: 07.02.2006 16:43
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

Verfasst: 12.02.2006 04:34
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

Verfasst: 12.02.2006 14:29
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:

Verfasst: 12.02.2006 18:06
von Sicro
Mit den Funktionen NetworkClientEvent() bzw. NetworkServerEvent() sollte auch vorher geprüft werden, ob Daten zum Empfangen vorhanden sind.

Mfg DerProgger

Verfasst: 12.02.2006 19:17
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

Verfasst: 12.02.2006 19:53
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:

Verfasst: 12.02.2006 21:13
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