Problem mit ReceiveNetworkData - Bleibt beim Clienten hängen
Verfasst: 10.09.2009 01:40
				
				Tachchen,
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:
Hier noch ein Beispiel bei dem Daten gesendet werden:
Beide Beispiel bleiben hängen bei ReceiveNetworkData!
Ä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!
			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!