stunden lang wusste ich nicht warum mein Programm einfach Einfriert.
Erst dachte ich ich habe selber eine Endlosschleife programmiert.
Doch dann stieß ich auf folgendes Problem:
ReceiveNetworkData.
Und zwar bleibt es auf der ClientSeite (also mit einer güligen ConnectionID) einfach hängen wenn es keine Daten mehr zum auslesen gibt, anstatt wie beim Server (mit einem güligen EventClient()) eine -1 zurück zu geben
Kurzes Beispiel, ohne das Daten gesendet werden:
Code: Alles auswählen
InitNetwork()
Debug CreateNetworkServer(#PB_Any, 7000)
ConnectionID = OpenNetworkConnection("127.0.0.1", 7000)
Debug ConnectionID
Debug "---"
Long.l
NetworkServerEvent()
Debug ReceiveNetworkData(EventClient(), @Long, 4)
NetworkClientEvent(ConnectionID)
Debug ReceiveNetworkData(ConnectionID, @Long, 4)
Debug "Ende"
Hier noch ein Beispiel bei dem Daten gesendet werden:
Code: Alles auswählen
InitNetwork()
; Variante ; ServerEmpfang = 0 , ClientEmpfang = 1
#Variante = 1
; Buffer ; wenn er teiler von Datenlänge ist BUG bei ClientEmpfang, sonst OK
#Buffer = 8
*Buffer = AllocateMemory(32)
CreateNetworkServer(1, 7000)
ConnectionID = OpenNetworkConnection("127.0.0.1", 7000)
Delay(100)
Select NetworkServerEvent()
Case #PB_NetworkEvent_Connect
ClientID = EventClient()
EndSelect
Quad.q = 12345678890
If #Variante
SendNetworkData(ClientID, @Quad, 8)
SendNetworkData(ClientID, @Quad, 8)
ID = ConnectionID
Else
SendNetworkData(ConnectionID, @Quad, 8)
SendNetworkData(ConnectionID, @Quad, 8)
ID = ClientID
EndIf
Repeat
If #Variante
Event = NetworkClientEvent(ID)
Else
Event = NetworkServerEvent()
EndIf
Select Event
Case #PB_NetworkEvent_Data
Repeat
Debug "ReceiveNetworkData START"
Length = ReceiveNetworkData(ID, *Buffer+Shift, #Buffer)
Debug "ReceiveNetworkData ENDE mit "+Str(Length)+" Bytes"
If Length > 0 : Shift + Length : EndIf
Until Length < #Buffer
Debug PeekQ(*Buffer)
Debug PeekQ(*Buffer+8)
Quit = #True
EndSelect
Until Quit
Debug "Beendet"
Ändet bei beim 2. beispiel #Variante = 0 , so läuft es (weil es ja dann auf der Serverseite ist)
Ach wenn man den LeseBuffer so ändert das er nicht genau alles ausließt (zb #Buffer = 13 )
___
Kurz und knapp:
ReceiveNetworkData() bleibt bei einer gültigen ConnectionID hängen, wenn keine Daten mehr zum Empfangen bereit stehen, anstatt -1 zurückzugeben wie es beim Server der fall ist!