ReceiveNetworkData()

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

Beitrag von Batze »

Musst davor eine Nummer z.B.: 0 angeben.
Man kann scheinbar mehrere Server öffnen.
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 »

Also dieser Code überprüft zwar an sich nichts, aber er läuft ohne abzuschmieren, egal ob der Buffer kleiner oder größer der gesendeten Daten ist.
Also wirst du wohl irgendwo was falsch an deiner Speicherverwaltung machen(Vermutung).

Und die Frage aus deinem ersten Beitrag beantwortest du fast selber.
Wie kriege ich dann, wenn Datenmenge=#Laenge herraus ob noch Daten da sind, oder exakt #Laenge Bytes empfangen wurden?

Code: Alles auswählen

Datenmenge = ReceiveNetworkData(EventClientNumber(), DatenBuffer, #Laenge)
die Variable "Datenmenge" gibt genau die Datenmenge zurück die empfangen wurde.
if Datenmenge = # laenger
;es sind (wahrscheinlich) noch daten zum auslesen da
endif

Wenn du nicht weißt ob Daten anliegen oder nur genau reinpaßten muß du einfach receive... nochmal aufrufen.
Ich mache das ganz einfach in der "Haupschleife" die auch dann die Daten ausliest, wenn vorher datenmenge=#laenge war. dazu nutze ich einfach eine variable als schalter.

Code: Alles auswählen

InitNetwork() 
Debug CreateNetworkServer(1,7777)
;#Laenge = 2
#Laenge = 6
DatenBuffer.l = AllocateMemory(#Laenge)
id.l
servernr.l

;ConnectionID.l = OpenNetworkConnection("192.168.1.102", 7777) 
ConnectionID.l = OpenNetworkConnection("127.0.0.1", 7777) 
Debug ConnectionID

Repeat
  servernr = EventServerNumber()
  Ergebnis = NetworkServerEvent() 
  id = EventClientNumber()
  If id > 0
    Datenmenge = ReceiveNetworkData(id, DatenBuffer, #Laenge) 
     Debug "Datenmenge:" + Str( Datenmenge )
  EndIf
  Delay (1000)
  Debug "servernr:" + Str( servernr.l )
  Debug "EventClientNumber:" + Str(id) + " : " + Str( send )
  send = SendNetworkString(ConnectionID, "test")
ForEver
mich verwirren aber noch diese "0" (NULL) im createserver. und es soll ja noch "flags" geben, also für UDP usw. aber WO und WIE man die einsetzt habe ich noch nicht gefunden. Auch nicht ob und wie sich die Datenverarbeitung der Netzwerkfunktionen wohl ändert wenn mehrere Server laufen können (wie ich vermute).

[edit]

Gruß
Toshy
Sebe
Beiträge: 585
Registriert: 11.09.2004 21:57
Wohnort: Europa
Kontaktdaten:

Beitrag von Sebe »

Ich schätze mal

0 = #PB_Network_TCP
1 = #PB_Network_UDP

oder eben andersrum.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ihr habt recht, das steht ja echt nirgendwo.
Außer in der Parameteranzeige, da stehen die Parameter:

CreateNetworkServer(ServerID, Port [,Type])
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 »

wäre aber nur vermutet. und wenn, dann muß man ja auch wohl die netzwerkfunktionen anders nutzen. UDP funktioniert ja anders als TCP. man kann bei udp ja nicht über die gleich leitung einfach was zurücksenden sonder muß die verbindung wohl selber aufbauen. nur ne vorgegebene rückantwort ist glaube ich möglich.
aber mit UDP habe ich keine Ahnung, nur so nebenbei mal was gelesen.
unabhängig davon habe ich bisher nur ein oder zweimal was im engslichen Forum gesehen wo der Parameter verwendet wird, da wurde aber bis Parameter 3 gegangen. muß ich nicht verstehen.

Ob es also die Anzahl der Server ist oder ein Flag ist nicht wirklich bekannt. Aber da man nun "EventServerNumber()" hat, denke ich das es wohl irgendwie mehr server geben kann. Was man dann aber macht oder wo man den UDP-Flag einbaut...? Keine Ahung!

[edit]
Parameteranzeige? Was ist das? ich nutze jaPBe(noch nicht die aktuelle "Beta") und wo soll das denn angezeigt werden? Habe ich noch nichts von gesehen.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Ich mein diese Statusleiste da unten, die einem die Parameter zu einer Prozedur und Infos anzeigt. Gibt es doch auch bei JaPBe.

Achja...
Ich denke mein Problem ist gelöst und ich hatte nur einen kleinen Fehler in meinem Servercode.
Zuletzt geändert von Batze am 12.02.2006 23:55, insgesamt 1-mal geändert.
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 »

Wir ja immer komischer.
Ob, habe es gefunden, noch nie gesehen vorher.
Liegt wohl mit daran das ich die Dinger zu schnell eintippe bzw. das autovervollständigen immer schnell nutze.

Was ich aber komisch finde und unerklärlich ist, das ihr (und jetzt auch ich) hier ne Servernummer vergeben (createnetworkserver(0,7777[,]) aber jaPBe anzeicht ...server(SERVERNAME$,port[,type])

Muß das jetzt einer verstehen???
Hiiiilfffeeeee ;-)

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

Beitrag von Batze »

Bei mir zeigt JaPBe das selbe an wie die PB-IDE.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Gesperrt