Hallo erstmal.
Folgende Situation:
Client sendet ein Datenpaket, dessen erstes Long eine "Identifizierungszahl" ist.
Ich überprüfe nun beim Serverprogramm, ist das erste Long die richtige "Identifizierungszahl".
Wenn dem nicht so ist, dann möchte ich die Verbindung unterbrechen, allerdings müsste der
Empfangsbuffer des Servers ja noch den Rest der Daten die geschickt wurden enthalten...
wie löscht man diesen ?
Muss ich jetzt trotzdem alles per ReceiveNetworkData() einlesen, oder geht dies auch auf
anderem Weg.
Das soll verhindern, dass der Server mit irgendwelchen Daten zugemüllt wird, die gar nicht für ihn
bestimmt sind...
Oder verfolge ich da einen völlig falschen Ansatz ?
Und die nächste Frage würde dann lauten, wie kann ich vom Server aus die Verbindung unterbrechen ?,
oder müsste ich da mit dem Client kommunizieren so nach dem Motto "Unterbrich die Verbindung Client"...
was ja nicht registriert wird, wenn nicht der entsprechende Client benutzt wird...
Beim Server den ReceiveNetworkData Empfangspuffer leeren ?
Beim Server den ReceiveNetworkData Empfangspuffer leeren ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Beim Server den ReceiveNetworkData Empfangspuffer leeren
Zum ersten Punkt:
Da ja schon die Daten vom Clienten im Eingangspuffer des Server liegen, wurde er schon "zugemüllt", das kann man meiner Meinung nach also nicht verhindern (unter PB-Bedingungen).
Das heißt, du kannst nur ein einer schnellen Schleife einfach ReceiveNetworkData() solange aufrufen bis alles leer ist.
Vielleicht hilft auch der zweite Punkte (folgt), das du einfach die Verbindung abbrichst, und dann PB selbst den Puffer leert.
Zum zweiten Punkt:
Da ja schon die Daten vom Clienten im Eingangspuffer des Server liegen, wurde er schon "zugemüllt", das kann man meiner Meinung nach also nicht verhindern (unter PB-Bedingungen).
Das heißt, du kannst nur ein einer schnellen Schleife einfach ReceiveNetworkData() solange aufrufen bis alles leer ist.
Vielleicht hilft auch der zweite Punkte (folgt), das du einfach die Verbindung abbrichst, und dann PB selbst den Puffer leert.
Zum zweiten Punkt:
CloseNetworkConnection() hat geschrieben: Schließt die angegebene Client-'Verbindung'. Wenn ein Client diese Funktion aufruft, erhält der Server ein #PB_NetworkEvent_Disconnect Event. Wenn ein Server diese Funktion aufruft, wird die Verbindung ohne Hinweis an den Client geschlossen.
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: Beim Server den ReceiveNetworkData Empfangspuffer leeren
Ah ok.
Und den zweiten Satz bei CloseNetworkConnection() hab ich doch glatt überlesen
Danke.
Und den zweiten Satz bei CloseNetworkConnection() hab ich doch glatt überlesen
Danke.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Beim Server den ReceiveNetworkData Empfangspuffer leeren
Ich habe in meinen Programmen das Ganze so geregelt, dass mein Server ein Packet mit einer Datenstruktur erhält (Username, Passwort) und der Server erst mal mit "akzeptiert/zurückgewiesen" reagiert. Wenn der Server die Kombination zurückweist, bricht der Client erst mal die Verbindung ab.. Find ich etwas eleganter, weil so beide Seite ne Art Feedback haben. Der Client bricht die Verbindung ab, aber nicht ohne dass es der Server merkt..
Re: Beim Server den ReceiveNetworkData Empfangspuffer leeren
Es geht ja im Grunde darum, zu erkennen, ob die Daten auch von einem Client kommen, der "dazugehört".
Ich sende als erstes Long eine Kennung, und wenn diese übereinstimmt, lese ich mit dem Client die Datenmenge,
die ankommen wird aus.
Wenn der (von mir gemachte) Client benutzt wird ist alles in Ordnung. Wenn aber irgendein anderes Programm
benutzt wird (z.B. ein Browser oder was weiss ich) ist der 2. Wert ja alles mögliche, aber nicht die Grösse, was
dann evt. zu Problemen beim Server führen könnte (IMA oder fehlerhaftes Einlesen der Daten)
Ich versuch mir so, ein minimales Protokoll zu basteln, und klappt eigentlich ganz gut
Ich sende als erstes Long eine Kennung, und wenn diese übereinstimmt, lese ich mit dem Client die Datenmenge,
die ankommen wird aus.
Wenn der (von mir gemachte) Client benutzt wird ist alles in Ordnung. Wenn aber irgendein anderes Programm
benutzt wird (z.B. ein Browser oder was weiss ich) ist der 2. Wert ja alles mögliche, aber nicht die Grösse, was
dann evt. zu Problemen beim Server führen könnte (IMA oder fehlerhaftes Einlesen der Daten)
Ich versuch mir so, ein minimales Protokoll zu basteln, und klappt eigentlich ganz gut
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Beim Server den ReceiveNetworkData Empfangspuffer leeren
Hi Bisonte,
da ein (in PB geschriebener) Client bei einem harten Schließen der Netzwerkverbindung Seitens des Servers keine Information darüber bekommt, ist so etwas natürlich nicht so ganz die sauberste Art.
Sollte der Client nicht von Dir sein, so kannst Du da natürlich nicht viel dran machen (da muss sich dann der Client selber drum kümmern so etwas sauber abzufangen).
Falls es sich bei dem Client aber um ein von Dir in PB geschriebenes Programm handelt, lohnt sich vielleicht ein Blick auf diesen Thread im englischen Forum.
Hier hat DarkPlayer eine CrossPlatform Lösung gepostet, der es dem Client ermöglicht ein Schließen der Netzwerkverbindung Seitens des Servers festzustellen, wodurch man dann entsprechend darauf entsprechend reagieren kann.
Greetz, PL.
da ein (in PB geschriebener) Client bei einem harten Schließen der Netzwerkverbindung Seitens des Servers keine Information darüber bekommt, ist so etwas natürlich nicht so ganz die sauberste Art.
Sollte der Client nicht von Dir sein, so kannst Du da natürlich nicht viel dran machen (da muss sich dann der Client selber drum kümmern so etwas sauber abzufangen).
Falls es sich bei dem Client aber um ein von Dir in PB geschriebenes Programm handelt, lohnt sich vielleicht ein Blick auf diesen Thread im englischen Forum.
Hier hat DarkPlayer eine CrossPlatform Lösung gepostet, der es dem Client ermöglicht ein Schließen der Netzwerkverbindung Seitens des Servers festzustellen, wodurch man dann entsprechend darauf entsprechend reagieren kann.
Greetz, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: Beim Server den ReceiveNetworkData Empfangspuffer leeren
Danke. Darkplayers Vorschlag hatte ich schon implementiert. 
Ich war mir halt nur nicht sicher, was mit dem Empfangsbuffer auf der Serverseite passiert,
wenn der Server die Daten nicht lesen soll, bzw. nicht der richtige Client antwortet...
Ich war mir halt nur nicht sicher, was mit dem Empfangsbuffer auf der Serverseite passiert,
wenn der Server die Daten nicht lesen soll, bzw. nicht der richtige Client antwortet...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom

