Wenig bis kein Auslösen des #PB_NetworkEvent_Data ?
Verfasst: 02.05.2013 01:49
Hallo.
Ich wollt da mal ein wenig von dem Server/Client "Krams" benutzen, um meinem Programm ein
wenig Kommunikation zu ermöglichen, da stiess ich auf eine Merkwürdigkeit.
In meinem leicht abgewandeltem Beispiel vom Server.pb und Client.pb aus der Hilfe
habe ich das Problem, das ohne Delays im Senden, beim Server kein #PB_NetworkEvent_Data
auftritt...
Connect und Disconnect werden problemlos erkannt. Sobald ich da grössere Delays (so ab 100ms)
einfüge, scheint es zu funktionieren.
Es ist auch egal ob ich zum Senden SendNetworkString() oder das selbstgebaute SendNetString()
benutze...
Ist es ein Bug, oder mach ich da nur irgendwo etwas falsch ?
Hier die beiden Dateien :
Ich wollt da mal ein wenig von dem Server/Client "Krams" benutzen, um meinem Programm ein
wenig Kommunikation zu ermöglichen, da stiess ich auf eine Merkwürdigkeit.
In meinem leicht abgewandeltem Beispiel vom Server.pb und Client.pb aus der Hilfe
habe ich das Problem, das ohne Delays im Senden, beim Server kein #PB_NetworkEvent_Data
auftritt...
Connect und Disconnect werden problemlos erkannt. Sobald ich da grössere Delays (so ab 100ms)
einfüge, scheint es zu funktionieren.
Es ist auch egal ob ich zum Senden SendNetworkString() oder das selbstgebaute SendNetString()
benutze...
Ist es ein Bug, oder mach ich da nur irgendwo etwas falsch ?
Hier die beiden Dateien :
Code: Alles auswählen
; Server.pb
If InitNetwork() = #False : End : EndIf
ID = CreateNetworkServer(#PB_Any, 6832, #PB_Network_TCP)
If Not ID : End : EndIf
Counter = 0 ; <-- zum zählen der gesamten NetworkServerEvents()
Repeat
SEvent = NetworkServerEvent()
If SEvent
Counter + 1
EClient = EventClient()
Select SEvent
Case #PB_NetworkEvent_Data
Debug "Data "+Str(EClient)
*Buffer = AllocateMemory(1024)
ReceiveNetworkData(EClient, *Buffer,1024)
Debug PeekS(*Buffer+4, PeekL(*Buffer), #PB_UTF8)
FreeMemory(*Buffer)
Case #PB_NetworkEvent_Connect
Debug "Connect "+Str(EClient)
Case #PB_NetworkEvent_Disconnect
Debug "Disconnect "+Str(EClient)
Quit = 1
Case #PB_NetworkEvent_None
Delay(1)
EndSelect
Else
Delay(1)
EndIf
Until Quit > 0
CloseNetworkServer(ID)
Debug "Events = " + Str(Counter)
Code: Alles auswählen
; Client.pb
If InitNetwork() = #False : End : EndIf
IP.s = "127.0.0.1"
ID = OpenNetworkConnection(IP, 6832, #PB_Network_TCP)
If Not ID : End : EndIf
Procedure SendNetString(ClientID, String$, Format = #PB_UTF8)
Protected Size.l = StringByteLength(String$, Format)+1
Protected *Buffer = AllocateMemory(Size+SizeOf(Long))
Protected Bytes = 0
Debug "Size = "+Str(Size)
If *Buffer
PokeL(*Buffer, Size)
Bytes = PokeS(*Buffer + 4, String$, Size, Format)
Debug "Poke = "+Str(Bytes)
If ClientID
Bytes = SendNetworkData(ClientID, *Buffer, Size+SizeOf(Long))
Debug "Send = "+Str(Bytes)
;Delay(100)
EndIf
FreeMemory(*Buffer)
EndIf
EndProcedure
SendNetString(ID, "Hallo")
SendNetString(ID, "Du Da, im Radio")
SendNetString(ID, "Du bist doch nicht alleine")
CloseNetworkConnection(ID)
;Delay(100)