Hi,
Ich hab nochmal ein Test gemacht in der ich mich beim Server anmelde und dann die verbindung wieder beende.
UDP:
Das leuft bis ca. 183 mal. Danach bleibt der Server und Client Stehen.
Das beenden des Clients kommt mit einem error in "_ENM_OpenConnection"
Der server reagiert nicht wenn der Client neu gestartet wird.
TCP:
Es leuft bis ca. 164 mal. Dann bleibt der Client stehen mit einem Fehler:
SafeNetwork.pbi
Code: Alles auswählen
Procedure __SendNetworkData(Connection, *Mem, MemSize)
Protected isOk, Mutex, rConnection
Shared __NetworkProtector
rConnection = __vId_Get(Connection)
With __NetworkProtector
LockMutex(\Mutex)
Mutex = \Connections(Str(Connection))\Mutex
UnlockMutex(\Mutex)
CompilerIf #SafeNetwork_UDPWorkAround
If Not Mutex
Mutex = \waUDPMutex
EndIf
CompilerEndIf
If Mutex And rConnection
LockMutex(Mutex)
isOk = SendNetworkData(rConnection, *Mem, MemSize) <---- Error
UnlockMutex(Mutex)
EndIf
EndWith
ProcedureReturn isOk
EndProcedure
[Error] Overflow in a dynamically allocated memory block.
Ich habe das zum testen geändert:
Code: Alles auswählen
Procedure NetEvent_RecData(Server, Client)
Protected myPakets.ENM_Pakets, Text$
Shared CB
Static x
; Kein Herumquälen mit Empfangsschleifen, Auseinanderteile des Empfangenen mehr ...
; ENM macht das alles im Hintergrund :D
; Pakete laden...
myPakets = ENM\ReceivePakets(Client)
If myPakets\Count()
While myPakets\GetNext() ; alle Pakete durchgehen
Text$ = PeekS(myPakets\GetMem(), myPakets\GetMemSize())
Debug "Client_Rec : " + Str(Client) + " " + Text$ ; Inhalt testweis anzeigen ...
; Testweise Antwort senden
If Text$ = "haha5"
ENM\SendPaket(Client, @"Danke Server :)", 15)
EndIf
Wend
EndIf
; Pakete freigebn
myPakets\Free()
If Not x
x+1
-------------------------------------------------------
For t = 1 To 2000
ENM\CloseConnection(Client)
_NewConnection()
a.s = Str(t)
ENM\SendPaket(myConnection, @a, Len(a))
Next
--------------------------------------------------------
EndIf
EndProcedure