Client-Server-Anwendung... größe eingehender Daten ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Client-Server-Anwendung... größe eingehender Daten ermitteln

Beitrag von Sunny »

Folgendes Problem:

Wenn der Befehl "NetworkServerEvent()" den Wert der Konstante "#PB_NetworkEvent_Data" enthält weiß ich ja, dass Daten zum empfang mittels "ReceiveNetworkData()" bereit stehen.
Ich möchte jetzt gern mal wissen, ob es möglich ist, die größe der bereitstehenden Daten zu ermitteln, bevor ich diese mit "ReceiveNetworkData()" empfange.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Client-Server-Anwendung... größe eingehender Daten ermit

Beitrag von STARGÅTE »

normalerweise, sendest du ja bei deinen Daten die Länge vorweg mit.
Damit weißt du dann wie viel noch kommt oder schon angekommen ist.
Da die Daten eh alle "zusamen kleben" würde es keinen Sinn machen, vorher zu wissen, dass 1MB daten da ist und alles in einen Memory packt, der dann aber eh wieder auseinander genommen werden muss.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Dark
Beiträge: 93
Registriert: 24.08.2007 20:36
Kontaktdaten:

Re: Client-Server-Anwendung... größe eingehender Daten ermit

Beitrag von Dark »

Schau dir mal bei meinem Disconnect Event http://www.purebasic.fr/english/viewtop ... 12&t=42559 folgenden Block an:

Code: Alles auswählen

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
    RetVal = ioctlsocket_(hSocket, #FIONREAD, @Length)
  CompilerElse
    RetVal = ioctl_(hSocket, #FIONREAD, @Length)
  CompilerEndIf
In Length steht nach dem Aufruf dann die Länge der verfügbaren Daten. Der Disconnect wird nämlich daran erkannt, das vom Betriebsystem ein Event ausgelöst wird, aber keine Daten vorhanden sind. Du musst nur in dem Code nachschauen was hSocket ist und die Werte der Konstanten übernehmen.

Dark
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Client-Server-Anwendung... größe eingehender Daten ermit

Beitrag von mk-soft »

TCP-IP überprüft nur ob die Verbindung Ok ist und der Datenblock ohne Fehler übertragen wurde.

Ob die gesamten Daten übertragen sind liegt in Obhut des Programmieres. Also Deine Aufgabe.
Wenn die Daten größer sind als die eingestellte MTU, etw 1300 Byte bei Internetverbindung, kommen mehrere Datenblöcke an.
Zum Beispiel bei Modbus Over TCP wird ein Header mit drei Worten übertragen.
1. Word: Transaction ID
2. Word: Protocol ID
3. Word: Datalen

Die ersten beiden worte werden als Kopie zurückgesendet. Im dritten Word steht die angehängte Datenlänge in Bytes.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten