netzwerk problem

Anfängerfragen zum Programmieren mit PureBasic.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

netzwerk problem

Beitrag 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!
Benutzeravatar
PBZecke
Beiträge: 399
Registriert: 02.09.2004 17:34

Beitrag 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.
Nein, ich habe die Suche nicht benutzt, und deshalb auch nichts dazu gefunden... :lol:
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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.
Zuletzt geändert von #NULL am 14.10.2006 08:22, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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]
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

danke ich werde es testen
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

danke!!
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

ClientEvent() ist ein Long
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten