Seite 1 von 2

netzwerk problem

Verfasst: 13.10.2006 17:19
von Brügge
Hallo

ich habe ein kleines netzwerkprogramm geschrieben, also einen server und einen client. wenn der client connectet, dann nutiert der server sich die daten. wenn jetzt allerdings der client dem server eine nachricht mit hilfe von "SendNetworkData" schickt, und der server die nachricht anguckt, dann bekommt der server sie immer wieder, egal ob der client schon aus ist oder nicht. der server bekommt ohne unterbrechung immer wieder diese nachricht:( was muss ich tun, damit der die nur einmal empfängt? zur hilfe stelle ich den code rein:

Code: Alles auswählen


InitNetwork()

Structure user
  an.d
  clientip.d
  text.s
  clientname.s
  nummer.d
EndStructure

buffer = AllocateMemory(300)

Dim user.user(100)

verbindung = CreateNetworkServer(0 ,1000,#PB_Network_TCP)
If verbindung >0 
  ergebnis = 0
  Repeat
    Ergebnis = NetworkServerEvent() 
    Client = EventClient() 
       
   If ergebnis > 0  
   client = GetClientIP(Client)
    
    weiter = 0
    If ergebnis = 1 
      For i = 0 To 100
        If weiter = 0
          If user(i)\an = 0
            user(i)\clientip =client
            user(i)\an = 1
            Debug(user(i)\clientip)
            weiter = 1
          EndIf
        EndIf
      Next i
    EndIf
    
    If ergebnis = 2
      Debug ("juhuu es wurde etwas geschickt...")
      Debug (client)
      ReceiveNetworkData(client, Buffer, 300)    
    EndIf 
       
    EndIf
  Until esc = 1

  CloseNetworkServer(0)
EndIf
thx!

Verfasst: 13.10.2006 18:23
von PBZecke
Ohne dass ich das jetzt wirklich ausgetestet habe, aber :

Code: Alles auswählen

repeat
....

until esc = 1
esc wird nie 1 bei Dir, und hast damit eine Endlosschleife.

Verfasst: 13.10.2006 18:45
von #NULL
gelöscht, weil ich blödsinn gelesen hatte.

..aber prüfe, ob dein Buffer gültig ist und die rueckgabe von receiveNetWorkData(), bzw nutze das @.
wenn dein receiveNetWorkData() nämlich fehlschlägt, bleiben in jeden durchgang daten zum empfang übrig ..nämlich alle! es wird dann für immer versucht sie erneut zu empfangen.

Verfasst: 13.10.2006 19:51
von mk-soft
Auf NetworkServerEvent() richtig reagieren. Siehe mal in der Hilfe nach.
0 : Nichts ist passiert
#PB_NetworkEvent_Connect : Ein neuer Client wurde mit dem Server verbunden
#PB_NetworkEvent_Data : Roh-Daten wurden empfangen (können mittels ReceiveNetworkData() gelesen werden)
#PB_NetworkEvent_File : Eine Datei wurde empfangen (kann mittels ReceiveNetworkFile() gelesen werden)
#PB_NetworkEvent_Disconnect: Ein Client hat den Server verlassen (Verbindungstrennung)
FF :wink: [/quote]

Verfasst: 14.10.2006 12:34
von Brügge
danke ich werde es testen

Verfasst: 14.10.2006 14:20
von Brügge
hallo soweit hat es jetzt funktioniert danke!!

jetzt habe ich aber noch ein problem: der server soll dem client jetzt eine mitteilung schicken "connected" ich habe mir gedacht, das der server jetzt den befehl SendNetworkData benutzt und als verbindung GetClientIP allerdings bekommt der client nix nichtmal eine leere mitteilung muss ich anstatt GetClientIP einen anderen befehl nutzen?


thx

Verfasst: 14.10.2006 14:26
von #NULL
wenn du die rueckgabe werte mal checken würdest (immer, und wenn was nich geht erst recht), würdest du merken, dass SendNetworkData() vermutlich fehlschlägt. daraufhin guckst du in die hilfe. und dort liest du dann.. stimmt, die hilfe ist hier unklar.
du brauchst die ClientID, die kriegst du mit EventClient() nach einem #PB_NetworkEvent_Connect.

Verfasst: 14.10.2006 14:29
von Brügge
danke!!

Verfasst: 14.10.2006 14:35
von Brügge
mist es geht immer noch nicht :( also ich habe 3 nummern

einmal
16777343.0 <--- GetClientIP(Client) und das ergebnis in double gepackt
16777343 <--- getclientip(client) und das ergebnis in fload
3743383.0 <--- EventClient() in double
3743383 <--- EventClient() in fload

welches davon ist jetzt richtig? ich habe alles getest was geht aber der sendet nix

Verfasst: 14.10.2006 14:59
von mk-soft
ClientEvent() ist ein Long