Was ist Result für eine länge...?

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Was ist Result für eine länge...?

Beitrag von funkheld »

Hallo, gutenn tag.

Code: Alles auswählen

DataBuffer = AllocateMemory(1024)

If status   
    cEvent = NetworkClientEvent(conID)
    
    Select cEvent      
      Case #PB_NetworkEvent_Data     
        Result = ReceiveNetworkData(ConID, DataBuffer, 255) 
        SetGadgetText(4, GetGadgetText(4) + PeekS(DataBuffer, result,#PB_Ascii)+ #CR$)
    EndSelect      
  EndIf
Was ist Result eigentlich von der Länge her gemäß den Daten vom Netzwerk?
Die empfangenen Daten wenn Select cEvent einmal durchlaufen wird , oder...?
Wie gross muss der letzte Wert , hier bei mir 255 , sein , wovon ist er abhängig?
Werden die Daten im DataBuffer drangehängt oder muss ich die zügig sichern aus dem DataBuffer, damit nichts
verloren geht?

Danke.
Gruss
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Was ist Result für eine länge...?

Beitrag von Derren »

Regelt der Treiber deiner Netzwerkkarte. Ebenso der Buffer. Du solltest normalerweise schon so bald wie möglich den Buffer auslesen, um sicher zu stellen, dass nichts verloren geht. TCP regelt das normalerweise, aber wenn der Buffer voll ist, wird die Verbindung langsamer. Nennt sich Congestion Control, wörtlich Verstopfungskontrolle, sprich, wenn die sendende Netzwerkkarte sieht, dass der Buffer voll ist (weil keine Antwort mehr kommt), wird die Datenrate zurückgefahren und dann langsam gesteigert.

edit: ich gehe von TCP aus, man sieht es am Code nicht. Bei UDP sieht die Sache anders aus. Da wirst du einfach vollgespammt, egal ob es ankommt oder nicht. Wenn was verloren geht ist das idR nicht so schlimm, da neuere Informationen direkt danach folgen (z.B. bei Onlinespielen, oder Streaming).
Google und Co haben auch gezeigt, dass UDP mit externer Paketkontrolle besser und schneller sein kann als TCP, aber dazu müsstest du deren Protokoll nutzen (manuell in PB, oder mit einer Lib). In der Regel wirst du aber wahrscheinlich die TCP-Bibliothek von PB nutzen, und dann gilt der obige Absatz
Signatur und so
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Was ist Result für eine länge...?

Beitrag von funkheld »

Es ist TCP.
Wird der DataBuffer bei mir durch Addition der Speicherstellen gefüllt ?
Oder werden die Daten immer wieder an den Anfang von meinem DataBuffer geschrieben ?

Danke.
GRuss
Benutzeravatar
helpy
Beiträge: 635
Registriert: 29.08.2004 13:29

Re: Was ist Result für eine länge...?

Beitrag von helpy »

funkheld hat geschrieben:Es ist TCP.
Wird der DataBuffer bei mir durch Addition der Speicherstellen gefüllt ?
Oder werden die Daten immer wieder an den Anfang von meinem DataBuffer geschrieben ?
ReceiveNetworkData schreibt die empfangenen Daten an die Adresse, welche an die Funktion ReceiveNetworkData übergeben wird. Die Funktion ReceiveNetworkData erhöht nicht selbständig die übergebene Adresse.
Windows 10
PB Last Final / (Sometimes testing Beta versions)
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Was ist Result für eine länge...?

Beitrag von funkheld »

Ja danke.

Jetzt funktioniert es.

Gruss
Antworten