Muss CloseNetworkConnection() sein, wenn der Server....
Muss CloseNetworkConnection() sein, wenn der Server....
Hallo.
Wenn ich mit OpenNetworkConnection() eine Verbindung mit einem Server hergestellt habe,
und dieser die Verbindung seinerseits unterbricht....
Muss man ein CloseNetworkConnection() anwenden, oder kann man gleich ein neues OpenNetworkConnection()
nehmen um die Verbindung wiederherzustellen ?
Weil eigentlich ist doch die ConnectionID nicht mehr gültig, da die Verbindung ja unterbrochen wurde... oder ist das
der Holzweg ?
Wenn ich mit OpenNetworkConnection() eine Verbindung mit einem Server hergestellt habe,
und dieser die Verbindung seinerseits unterbricht....
Muss man ein CloseNetworkConnection() anwenden, oder kann man gleich ein neues OpenNetworkConnection()
nehmen um die Verbindung wiederherzustellen ?
Weil eigentlich ist doch die ConnectionID nicht mehr gültig, da die Verbindung ja unterbrochen wurde... oder ist das
der Holzweg ?
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: Muss CloseNetworkConnection() sein, wenn der Server....
Code: Alles auswählen
InitNetwork()
#Port = 6002
If CreateNetworkServer(0, #Port)
connection = OpenNetworkConnection("localhost", #Port)
If connection
Repeat
Select NetworkServerEvent()
Case #PB_NetworkEvent_Connect
Debug "Server: Client hat sich zum Server verbunden"
Delay(5000)
Debug "Server: Verbindung zum Client wird getrennt..."
CloseNetworkConnection(EventClient())
Case #PB_NetworkEvent_Disconnect
; Diese Meldung kommt nicht, wenn der Server die Verbindung trennt
Debug "Server: Client hat sich vom Server getrennt"
EndSelect
Select NetworkClientEvent(connection)
Case #PB_NetworkEvent_Disconnect
Debug "Client: Server hat die Verbindung getrennt"
CloseNetworkConnection(connection)
EndSelect
ForEver
EndIf
EndIf
Getestet unter Linux.

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: Muss CloseNetworkConnection() sein, wenn der Server....
ok man kann sollte ein CloseNetworkConnection machen.
@Sicro: in deiner Schleife hast du irgendwie vergessen eine neue Verbindung zu öffnen, nachdem vom Server der Disconnect auftritt...
Da keine Fehlermeldung kommt, gehe ich einfach davon aus.
Danke für den "Selbstconnect" Code
@Sicro: in deiner Schleife hast du irgendwie vergessen eine neue Verbindung zu öffnen, nachdem vom Server der Disconnect auftritt...
Da keine Fehlermeldung kommt, gehe ich einfach davon aus.
Danke für den "Selbstconnect" Code

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: Muss CloseNetworkConnection() sein, wenn der Server....
Nein, ein erneutes OpenNetworkConnection() habe ich nicht vergessen, sondern absichtlich weggelassen, weil bereits so sichtbar war, ob man CloseNetworkConnection braucht oder nicht.
Deine Frage war ja, ob CloseNetworkConnection vor der erneuten OpenNetworkConnection erforderlich ist, obwohl NetworkClientEvent = #PB_NetworkEvent_Disconnect ist.
Ich habe also einfach mal CloseNetworkConnection() eingefügt und das Programm stoppte mit einer Fehlermeldung: "Zeile: 23 - Programm abgebrochen (durch eine externe Library). Wobei die externe Library die NetworkLib ist.
Habe ich das richtig verstanden, bei dir kommt kein Fehler bei obigem Code? Merkwürdig
Was mir übrigens noch aufgefallen ist: CreateNetworkServer() schlägt manchmal fehl, wenn man den Code unter Linux zu schnell erneut startet. Ob das unter Windows ebenfalls so ist, kann ich gerade nicht testen.
Deine Frage war ja, ob CloseNetworkConnection vor der erneuten OpenNetworkConnection erforderlich ist, obwohl NetworkClientEvent = #PB_NetworkEvent_Disconnect ist.
Ich habe also einfach mal CloseNetworkConnection() eingefügt und das Programm stoppte mit einer Fehlermeldung: "Zeile: 23 - Programm abgebrochen (durch eine externe Library). Wobei die externe Library die NetworkLib ist.
Habe ich das richtig verstanden, bei dir kommt kein Fehler bei obigem Code? Merkwürdig

Was mir übrigens noch aufgefallen ist: CreateNetworkServer() schlägt manchmal fehl, wenn man den Code unter Linux zu schnell erneut startet. Ob das unter Windows ebenfalls so ist, kann ich gerade nicht testen.

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: Muss CloseNetworkConnection() sein, wenn der Server....
Nein, bei deinem Code kommt unter Windows keine Fehlermeldung.
Habe dann das OpenNetworkConnection hinzugefügt, damit es jedesmal aufs neue verbindet... und das Delay verkleinert
(1000 ms reicht auch um das zu verfolgen zumindest unter Windows)
Dabei hab ich dann gesehen (mit dem Taskmanager) dass die Handles ohne CloseNetworkConnection immer mehr werden... also ist das notwendig.
Mit dem schliessen blieb die Handle - Anzahl stabil. (Wie gesagt, unter Windows)
Habe dann das OpenNetworkConnection hinzugefügt, damit es jedesmal aufs neue verbindet... und das Delay verkleinert
(1000 ms reicht auch um das zu verfolgen zumindest unter Windows)
Code: Alles auswählen
InitNetwork()
#Port = 6002
If CreateNetworkServer(0, #Port)
connection = OpenNetworkConnection("localhost", #Port)
If connection
Repeat
Select NetworkServerEvent()
Case #PB_NetworkEvent_Connect
Debug "Server: Client hat sich zum Server verbunden"
Delay(1000)
Debug "Server: Verbindung zum Client wird getrennt..."
CloseNetworkConnection(EventClient())
Case #PB_NetworkEvent_Disconnect
; Diese Meldung kommt nicht, wenn der Server die Verbindung trennt
Debug "Server: Client hat sich vom Server getrennt"
EndSelect
Select NetworkClientEvent(connection)
Case #PB_NetworkEvent_Disconnect
Debug "Client: Server hat die Verbindung getrennt"
CloseNetworkConnection(connection)
connection = OpenNetworkConnection("localhost", #Port)
If Not connection
Break
EndIf
EndSelect
Delay(5)
ForEver
EndIf
EndIf
Mit dem schliessen blieb die Handle - Anzahl stabil. (Wie gesagt, unter Windows)
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: Muss CloseNetworkConnection() sein, wenn der Server....
Jetzt habe ich die Ursache gefunden: Das zweite CloseNetworkConnection() wird nach dem Aufruf beim nächstem Schleifendurchlauf wieder aufgerufen, was dann zu einem Fehler führt, weil die Verbindung ja bereits geschlossen wurde und selbstverständlich nicht nochmal geschlossen werden kann. Windows toleriert diesen Fehler laut deiner Aussage einfach.

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Re: Muss CloseNetworkConnection() sein, wenn der Server....
Ich korrigiere : Es kommt keine Fehlermeldung, aber es bleibt an der Stelle stehen... das Programm läuft einfach nicht weiter.
Habe deinen Code unter Linux Mint 17 ausprobiert und dort auch die Fehlermeldung gesehen.
Mit meiner Variante... ist alles so wie es sein soll ...
Allerdings... gibt es bei Linux Mint irgendwie ein Taskmanager ähnliches Programm, damit man sich das ganze mal genauer betrachen kann ?
Habe deinen Code unter Linux Mint 17 ausprobiert und dort auch die Fehlermeldung gesehen.
Mit meiner Variante... ist alles so wie es sein soll ...
Allerdings... gibt es bei Linux Mint irgendwie ein Taskmanager ähnliches Programm, damit man sich das ganze mal genauer betrachen kann ?
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: Muss CloseNetworkConnection() sein, wenn der Server....
Ja, die Systemüberwachung. Dort den Process mit der rechten Maustaste anklicken, "Offene Dateien" wählen und schon siehst du eine Liste aller offenen Handles (Dateien, Netzwerk usw.).Bisonte hat geschrieben:gibt es bei Linux Mint irgendwie ein Taskmanager ähnliches Programm, damit man sich das ganze mal genauer betrachen kann
Die Liste öffnen sich sehr träge, wenn der Process stark beschäftigt ist.
Brauchst du nur die Anzahl der Handles, kannst du diese sehr flott über das Terminal ermitteln:
1. Notiere dir die Process-Kennung aus der Systemüberwachung oder über das Terminal-Programm "top" (dort heißt die Kennung "PID").
2. Führe im Terminal das aus:
Code: Alles auswählen
ls /proc/6794/fd | wc -l

Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version