Ich versuche mich gerade an einem Server-Client Programm...
Ein Client soll sich mit dem Server verbinden.
1. Der Client sendet also ein Login String und wartet auf Antwort.
2. Der Server empfängt den Login String und verarbeitet die Daten.
3. Der Server schickt eine Antwort.
4. Der Client empfängt die Antwort.
Dazu hab ich Fragen ...
Gibt es da zwischen Punkt 1 und Punkt 4 einen Timeout ?
Oder kann sich der Server alle Zeit der Welt leisten bis er die Anwort schickt ?
Wenn mehrere Clients sich verbinden, liegen nun mehrere Logindaten vor.
Existiert soetwas wie ein Queue bei dem ServerEvent und/oder RecieveNetwork, damit ich alles schön der Reihe nach abarbeiten kann ?
Oder muesste ich jetzt den Client solange den Login String senden lassen,
bis der Server endlich die passende Antwort geschickt hat ?
Und dann noch : Wenn der Client eine Weile keine Daten Sendet oder empfängt, schliesst sich die Verbindung irgendwann automatisch, oder
ist die Verbindung erst mit dem CloseNetwork geschlossen ?
(Ich habe das bei MySQL DB's bemerkt, das man da öfters prüfen muss, da der Server einen nach einer Weile die Verbindung kappt, wenn keine Aktionen durchgeführt wurden.)
Server - Client Kommunikation
Server - Client Kommunikation
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
Zwischen Punkt 1 und 4 sollte es nur einen Timeout geben, wenn du diesen selber programmierst. Ob sich die Verbindung automatisch schließt, kann ich nicht genau sagen. Ich denke es wird ein Timeout geben, dieses wird aber wahrscheinlich großzügig sein.
Ich handhabe es so, alle paar Sekunden einen Ping zu schicken und somit die Kontakte des Servers aktuell zu halten. Soll zB jede Sekunde ein Ping geschickt werden, und es kommt 10 Sekunden keine Antwort, gibts einen von mir erstellten Timeout.
Du arbeitest ja alle Networkevents ab. Diese sind nach den ClientIDs sortiert. Sprich:
-Prüfen ob ein Event auftritt
-Client feststellen
-Event auswerten (ReceiveNetworkData)
Sollten 5 Clients gleichzeitig etwas schicken, wird halt 5 mal ein Networkevent ausgelöst.
Jede Nachricht braucht (bei TCP) nur einmal gesendet werden. Der Server wirds nach belieben auswerten können.
Am einfachsten (finde ich) ist es, eine LinkedList zB mit der Struktur:
ClientID
Text
Zeitpunkt
zu erstellen und einfach beim Empfangen per Addelement() dieses hinzu zufügen. Irgendwo arbeitest du diese Liste dann ab.
Ich handhabe es so, alle paar Sekunden einen Ping zu schicken und somit die Kontakte des Servers aktuell zu halten. Soll zB jede Sekunde ein Ping geschickt werden, und es kommt 10 Sekunden keine Antwort, gibts einen von mir erstellten Timeout.
Du arbeitest ja alle Networkevents ab. Diese sind nach den ClientIDs sortiert. Sprich:
-Prüfen ob ein Event auftritt
-Client feststellen
-Event auswerten (ReceiveNetworkData)
Sollten 5 Clients gleichzeitig etwas schicken, wird halt 5 mal ein Networkevent ausgelöst.
Jede Nachricht braucht (bei TCP) nur einmal gesendet werden. Der Server wirds nach belieben auswerten können.
Am einfachsten (finde ich) ist es, eine LinkedList zB mit der Struktur:
ClientID
Text
Zeitpunkt
zu erstellen und einfach beim Empfangen per Addelement() dieses hinzu zufügen. Irgendwo arbeitest du diese Liste dann ab.
Es gibt keinen Timeout, ganz im gegenteil. Wenn der Server
CloseNetworkConnection() aufruft, wird dem entsprechenden Client keine
Nachricht geschickt. Dieser kann also immer noch munter weiter Daten
schicken, er wird nur keine Antwort mehr bekommen.
Macht der Client das allerdings, wird der Server benachrichtigt.
MFG PMV
CloseNetworkConnection() aufruft, wird dem entsprechenden Client keine
Nachricht geschickt. Dieser kann also immer noch munter weiter Daten
schicken, er wird nur keine Antwort mehr bekommen.
Macht der Client das allerdings, wird der Server benachrichtigt.
MFG PMV
Also ganz brav vor dem CloseNetworkConnection() an jeden Client ein Logoff schicken...
Sowas hab ich mir dann fast gedacht...
Na dann bin ich mal auf den Stresstest gefasst
Ohne Threads mit ca. 50 Clients gleichzeitig...
Mal sehen ob das funktioniert, es geht bei der Kommunikation auch nur um bytehappen... soll dem Anticheating dienen ähnlich wie Punkbuster.
Sowas hab ich mir dann fast gedacht...
Na dann bin ich mal auf den Stresstest gefasst

Ohne Threads mit ca. 50 Clients gleichzeitig...
Mal sehen ob das funktioniert, es geht bei der Kommunikation auch nur um bytehappen... soll dem Anticheating dienen ähnlich wie Punkbuster.
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
Naja ich scheue mich ein wenig davor... weil ich damit noch nie wirklich was gemacht habe...
und wenn ich mir die ganzen Threads im Forum hier anschaue, scheint das eine ganz bösartige schwierige Sache zu sein: diese Threadprogrammierung.
Ausserdem hab ich eine menge LinkLists da drin, daher hab ich ein kleinen Bammel davor, dass mir das alles unerwartet durcheinanderwirbelt... das wäre uncool...
und wenn ich mir die ganzen Threads im Forum hier anschaue, scheint das eine ganz bösartige schwierige Sache zu sein: diese Threadprogrammierung.
Ausserdem hab ich eine menge LinkLists da drin, daher hab ich ein kleinen Bammel davor, dass mir das alles unerwartet durcheinanderwirbelt... das wäre uncool...

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