Seite 1 von 3

Netzwerk - IDs verwalten etc.

Verfasst: 25.07.2006 11:48
von smateja
Hallo zusammen - ich hab mir gerade mal angeschaut wie das mit der Netzwerkgeschichte funktioniert etc. habe auch schon versucht in div. Threads etc. mehr über meine Problematik in Erfahrung zu bringen, leider, so muß ich gestehen, komm ich nicht weiter - aber vielleicht hat ja hierzu jemand eine gute Idee etc.

Also:

Mein Problem ist es, dass ich nicht weiß wie ich an einem Server die Clients so verwalten kann, dass ich Sie einzeln ansprechen kann (gezielt) - Mir ist klar dass ich hier ne Art kleine Datenbank benötige nur beim umsetzten hab ich glaub Logikprobleme, gerade wenn ich die anderen Beispiele hierzu anschaue.

Server:

Code: Alles auswählen

Structure Aktive_Clients
   ClientID.l
   Nickname.s
EndStructure

Dim Client_Liste.Aktive_Clients(4000)

OpenConsole()

InitNetwork()
CreateNetworkServer(00001, 6060, #PB_Network_TCP)
NetzwerkPuffer = AllocateMemory(1000)

Repeat
    WindowEvent()  
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
      ClientIP = GetClientIP(ClientID) 
      Select SEvent
      
        Case 1
          PrintN("SV_Event: Client connected "+Str(ClientID)+" "+IPString(ClientIP))
  
        Case 2
          Print("SV_Event: "+Str(ClientID)+" "+IPString(ClientIP))
          ReceiveNetworkData(ClientID, NetzwerkPuffer, 1000)
          PrintN(" "+PeekS(NetzwerkPuffer))
          
          
          Debug Befehl$=PeekS(NetzwerkPuffer)
          
          If Befehl$="godmode"
            End
          EndIf
          
          SendNetworkString(ClientID,"..recieved..")
          
          FreeMemory(NetzwerkPuffer)
          NetzwerkPuffer = AllocateMemory(1000) ; zum leeren sonst bleiben reste von der vorherigen nachrit drin, warum auch immer

        Case 4
          PrintN("SV_Event: Client "+Str(ClientID)+" has closed the connection")
          
    
      EndSelect
    EndIf
    Delay(1)
  Until Quit = 1 
  
CloseNetworkServer(0)
Client:

Code: Alles auswählen

InitNetwork()
  
newconnect:
OpenConsole()
ConnectionID = OpenNetworkConnection("127.0.0.1", 6060,#PB_Network_TCP)
NetzwerkPuffer = AllocateMemory(1000)


If ConnectionID
  
Print("Nickname: ")
UserID$=Input()  
  
  
  
Repeat  
  
CEvent = NetworkClientEvent(ConnectionID) 
  
Select CEvent

Case 2
    ReceiveNetworkData(ConnectionID, NetzwerkPuffer, 1000) 
    PrintN(" "+PeekS(NetzwerkPuffer)) 
    FreeMemory(NetzwerkPuffer)
    NetzwerkPuffer = AllocateMemory(1000)

Case 0
    Print("Nachricht: ")
    zuSenden$ = Input()
  
    SendNetworkString(ConnectionID, UserID$+" "+zuSenden$)
    ReceiveNetworkData(ConnectionID, NetzwerkPuffer, 1000) 
    PrintN(" "+PeekS(NetzwerkPuffer)) 
    FreeMemory(NetzwerkPuffer)
    NetzwerkPuffer = AllocateMemory(1000)
    
  EndSelect
Until zuSenden$="exit" 

EndIf
  
End   
Kann mir evtl. jemand ein Beispiel geben mit erklärung für die ganz dummen *G - denn ich plans derzeit mal garnicht. Hoffe nur meine Beschreibung war ausrecihend genug - und ja, - merci schon mal für die Hilfe.

Verfasst: 25.07.2006 12:13
von mk-soft
Habe ein Beispiel geschrieben für Multi User Server

http://www.purebasic.fr/german/viewtopic.php?t=9049

FF :wink:

re:

Verfasst: 25.07.2006 12:14
von smateja
ha - mega-merci und sehr geil - jetzt brauch ich nur noch n tut um die foren suche zu optimieren - sorry G* lol - nochmals merci

RE:

Verfasst: 25.07.2006 13:28
von smateja
erneute kleine Problematik - wie schaff ich es dass der server ein einfachs repeat an alle clients schickt - nur nicht an den von dem die nachricht kommt ?! - hat da jemand ne idee vielleicht - habs auch schon selbst versucht - nur anhand der beispiele tuts etc die ich vor mir liegen hab bekomme ich das selbst nicht ganz gebacken - merci

Code: Alles auswählen

Structure client_structure
  ClientID.l
  ClientIP.l
  ClientPort.l
  ClientSocket.l
  
  timeConnect.l
  timeUpdate.l
  
  inData.s
  outData.s
  inFile.s
  outFile.s
  
  login.s
  passwd.s
  rights.l
EndStructure



NewList user.client_structure()



OpenConsole()

InitNetwork()
CreateNetworkServer(00001, 6060, #PB_Network_TCP)


Repeat
    WindowEvent()  
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
      ClientIP = GetClientIP(ClientID) 
      
      NetzwerkPuffer = AllocateMemory(1000)
       
      Select SEvent
      
     
      
        Case 1
          PrintN("SV_Event: Client connected "+Str(ClientID)+" "+IPString(ClientIP))
  
        Case 2
          Print("SV_Event: "+Str(ClientID)+" "+IPString(ClientIP))
          ReceiveNetworkData(ClientID, NetzwerkPuffer, 1000)
          PrintN(" "+PeekS(NetzwerkPuffer))
            ForEach User()
              If User()\ClientID = ClientID
                 DeleteElement(User())
                Break
              EndIf 
            Next
              AddElement(User())
                User()\ClientID = ClientID
                User()\ClientIP = GetClientIP(ClientID)
                User()\ClientPort = GetClientPort(ClientID)
                User()\ClientSocket = ConnectionID(ClientID)
  
                User()\timeConnect = Date()
                User()\timeUpdate= Date()
  
                User()\inData = ""+PeekS(NetzwerkPuffer)
                User()\outData = ""+PeekS(NetzwerkPuffer)
                User()\inFile = """
                User()\outFile = ""
              
          
          If PeekS(NetzwerkPuffer)="shutdown"
            End
          EndIf
          
          SendNetworkString(ClientID,"..recieved..")
          
          FreeMemory(NetzwerkPuffer)
          
        Case 4
          PrintN("SV_Event: Client "+Str(ClientID)+" has closed the connection")
          
    
      EndSelect
    EndIf
    Delay(1)
  Until Quit = 1 
  
CloseNetworkServer(0)

re:

Verfasst: 25.07.2006 15:22
von smateja
Niemand ne Idee??

Re: re:

Verfasst: 25.07.2006 15:24
von Kiffi
smateja hat geschrieben:Niemand ne Idee??
wir sind hier nicht im Chat!

re:

Verfasst: 25.07.2006 15:59
von smateja
warum chat - hey ich spreche mit meinem thread ja auch die arbeitslosen und berufstätigen an die nichts zu tun haben und n ganzen tag während der arbeit nichts zu tun haben - oder diejenigen die bei so nem wetter gerne in der bude hocken weil se keine freunde etc haben *G - *spaß muß sein*

(anbei bin wie du a) spammer und b) postsammler - egal wie *G)

ne mir ist bewußt dass nicht sofort ne antwort kommt - aber nach knapp 3 stunden darf ich mich doch emühen dass der thread wieder nach etwas oben rutscht damit er nicht in vergessenheit gerät oder? :)

...... und nun ende der diskussion -.... zurück zum eigentlichen problem -> siehe letztes code bschnippserle *G

Re: re:

Verfasst: 25.07.2006 16:23
von Kiffi
kaum im Board gelandet und schon auf dicke Hose machen.

> (anbei bin wie du a) spammer und b) postsammler - egal wie *G)

verstehe ich jetzt nicht. Kannst Du das vielleicht in einer mir bekannten
Sprache wiederholen? Ach nee, vergiss es, lohnt nicht.

> ...... und nun ende der diskussion

wenn Du meinst...

re:

Verfasst: 25.07.2006 16:35
von smateja
ich meinte damit - das ich es leid bin mich in div. foren outen zu müssen und unproduktive unterhaltungen wie unsere hier gerade zu führen -

mal im ernst ist absolut unproduktiv und bringt garnichts oder?

ne idee auf meine frage hätte mir mehr gebracht als bezeichnungen wie kaum im board und schon einen auf dicke hose machen *naja sind ja erst knapp 2 jahre

und hey als kaum programmierer sollte es doch wohl erlaubt sein hier fragen zu stellen - und wenn so n sinnlos unproduktiver post von dir kommt wie: simmer hier im chat? kommt - naja - mußte halt damit rechnen dass da mein senf hinterher kommt. Ich denke nun ist die zeit gekommen dass wir das beide einfach lassen und gut - weil bringt wohl 0,0

Verfasst: 26.07.2006 01:24
von mk-soft
äh???
ha - mega-merci und sehr geil - jetzt brauch ich nur noch n tut um die foren suche zu optimieren
Danke für den Lob, aber leider das konzept von mein Beispiel nicht verstanden.
Habe wohl zu wenig Kommentar geschrieben