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.
Client-Server-Anwendung... größe eingehender Daten ermitteln
Re: Client-Server-Anwendung... größe eingehender Daten ermit
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.
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Client-Server-Anwendung... größe eingehender Daten ermit
Schau dir mal bei meinem Disconnect Event http://www.purebasic.fr/english/viewtop ... 12&t=42559 folgenden Block an:
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
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
RetVal = ioctlsocket_(hSocket, #FIONREAD, @Length)
CompilerElse
RetVal = ioctl_(hSocket, #FIONREAD, @Length)
CompilerEndIf
Dark
Mein Blog: http://fds-team.de/cms/
Re: Client-Server-Anwendung... größe eingehender Daten ermit
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
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

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