CreateNetworkServer() ab PB 6.10
Verfasst: 10.06.2024 22:53
Moin zusammen,
bis PB 6.04 funktioniert die Funktion CreateNetworkServer() wie in der Hilfe beschrieben.
Sie liefert beim Versuch, einen Server auf einem bereits belegten Port zu erstellen den Wert 0, sonst einen Wert >0.
Ab PB 6.10 ist der Rückgabewert immer > 0, egal wie oft ich einen Server mit dem selben Port erzeuge. Möglicherweise wird kein gar kein Server erstellt, aber die Funktion liefert immer einen Erfolg (also >0)
Folgendes Testprogramm demonstriert den Unterschied zwischen PB 6.04 und PB > 6.04:
Kann mir nicht vorstellen, dass dies ein Bug ist, möglicherweise wird das ab 6.10 anders gebaut, ist aber in der Hilfe nicht beschrieben (vermute ich)
EDIT: um die Wirkung zu sehen, muß das obige Programm mehrmals gestartet werden, so dass mehrere Instanzen laufen. Wenn ein laufender Server erkannt wird, wird die neue Instanz mit einer neuen Port-Nummer gestartet und die Fenster im Titel durchnummeriert.
bis PB 6.04 funktioniert die Funktion CreateNetworkServer() wie in der Hilfe beschrieben.
Sie liefert beim Versuch, einen Server auf einem bereits belegten Port zu erstellen den Wert 0, sonst einen Wert >0.
Ab PB 6.10 ist der Rückgabewert immer > 0, egal wie oft ich einen Server mit dem selben Port erzeuge. Möglicherweise wird kein gar kein Server erstellt, aber die Funktion liefert immer einen Erfolg (also >0)
Folgendes Testprogramm demonstriert den Unterschied zwischen PB 6.04 und PB > 6.04:
Code: Alles auswählen
EnableExplicit
ExamineDesktops() ;anzahl der desktops ermitteln
Global.i wx,wy,ev
Global.s ft,nz
Procedure chk_ins()
;initialisert einen netwerkserver, und prüft, ob auf diesem port bereits ein server läuft
;wenn ja, probiere ich den nächsten port
Protected po.i = 6107,l.i,e.i
Repeat ;schleife für servererstellung und um ggf. einen port nach dem anderen zu testen
po + 1 ;portnr. erhöhen
l+1 ; instanzzähler
e = CreateNetworkServer(0, po,#PB_Network_UDP,"127.0.0.1") ;server starten und rückgabe in e
MessageRequester("Rückgabe","Versuch "+l+": "+Str(e)) ;testausgabe
If e ;wenn mit aktuellen port ein server gestartet wurde
nz = Str(l) ;instanz-nr. an globale stringvariable
ElseIf l>8 ;wenn nach dem 9.versuch kein server erstellt werden konnte
e = 1 ;flag zum verlassen setzen
nz = "?" ;instanzanzeige setzen, damit zu sehen ist, das zu viele Instanzen offen sind oder serverstart fehlgeschlagen ist
EndIf
Until e > 0
If l > 1 ;wenn mehr als eine instanz gestartet wird
wx + (l*20) - 20 ;xposition ein paar pixel erhöhen, damit das neue Fenster nicht genau über den zuvor gestarteten fenster klebt
wy + (l*20) - 20 ;yposition wie x position
ResizeWindow(0,wx,wy,#PB_Ignore, #PB_Ignore) ;neue fensterposition herstellen
EndIf
EndProcedure
;------------------------------------------------------------------------------------
ft = "Server" ;fenstertitel
wx = DesktopWidth(0) / 2 - 110 ;horizental zentrieren
wy = DesktopHeight(0) /2 - 200 ;vertikal etwas über dem zentrum platzieren
OpenWindow(0, wx, wy, 225, 110,ft,#PB_Window_MinimizeGadget)
StickyWindow(0,#True) ;fenster fest im vordergrund
CompilerIf #PB_Compiler_Version < 600 ;wenn compilerversion unter 6.00 - also initnetwork() noch unterstützt wird
If InitNetwork() ;netzwerkfunktion initialisieren
chk_ins() ; lokalen server starten und instanzen checken
EndIf
CompilerElse ;wenn compiler 6.00 und höher - also initnetwork() nicht mehr unterstützt wird
chk_ins() ; lokalen server starten und instanzen checken
CompilerEndIf
SetWindowTitle(0,ft+" ["+nz+"]") ;fenstertitel mit der ermittelten instanz beschriften
Repeat ;ereignisschleife
ev = WaitWindowEvent()
Select ev
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EDIT: um die Wirkung zu sehen, muß das obige Programm mehrmals gestartet werden, so dass mehrere Instanzen laufen. Wenn ein laufender Server erkannt wird, wird die neue Instanz mit einer neuen Port-Nummer gestartet und die Fenster im Titel durchnummeriert.