Seite 2 von 4

Verfasst: 14.06.2005 20:24
von AndyX
Is eigentlich ne API-Function, also gehört nen '_' dahinter :|

Verfasst: 14.06.2005 20:38
von MVXA
Trottel ich :oops:. Kommt davon, wenn man von der MSDN Seite kopiert >___<.

Verfasst: 14.06.2005 20:43
von AirTokio
Ey ist doch aber total egal! Funktioniert jetzt ;)
Könntet ihr mir jetzt noch mit den verschicken der Naricht an alle verbundenen Clients helfen?

Verfasst: 14.06.2005 20:46
von AndyX
mach ne LinkedList und schick dann zu jedem der da eingetragen is ne nachricht.

Ungefähr so:

Code: Alles auswählen

NewList Clients.l()

AddElement Clients.l()
Clients() = clientnummer1

AddElement Clients.l()
Clients() = clientnummer2

;da fügst du halt Clients hinzu
;dann...

ForEach Clients()
  SendNetowrkString(Clients(),undsoweiter)
Next
So sollte das ungefähr funktionieren ;)

Verfasst: 14.06.2005 20:50
von AirTokio
Wow klingt ja ganz einfach ;)
Bloss wo in den Quelltext soll ich es reinschreiben, bzw kommt wieder ein Fehler: Clients is not a valid operator ?

Verfasst: 14.06.2005 21:05
von AndyX
Irgendwo zwischendrin, zeig doch mal deinen jetzigen Code :)

Verfasst: 14.06.2005 21:08
von AirTokio
Jo klar ;)
Kommt aber ein Fehler: "Clients" is not a valid Operator!

Server:

Code: Alles auswählen

OpenConsole()                                             
 
ConsoleTitle("Server")                             
ConsoleColor (15, 0)



If InitNetwork() = 0
  PrintN("Konnte Netzwerk nicht finden !")
  End
EndIf

Port = 6832
Buffer = AllocateMemory(1000)

If CreateNetworkServer(Port)

  PrintN("Server wurder erstellt (Port "+Str(Port)+").")
 
  Repeat
     
    SEvent.l = NetworkServerEvent()
 
    If SEvent
   
      ClientID = NetworkClientID()
 
      Select SEvent
     
        Case 1
          PrintN("Ein neuer Client hat sich angemeldet !")
 
        Case 2 
        RtlZeroMemory_(Buffer, 1000)
        ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
        PrintN(""+ PeekS(Buffer))
             
        
        
        NewList Clients.l()

        AddElement Clients.l()
        Clients() = clientnummer1

        AddElement Clients.l()
        Clients() = clientnummer2

        ForEach Clients()
        SendNetowrkString(Clients(),undsoweiter)
        Next
        
        
        
        
        Case 3
          PrintN("Client "+ Str(ClientID) + " hat die Verbindung beendet...")
   
   
   

   
      EndSelect
    EndIf
   
  Until Quit = 1
 
  PrintN("Klicke zum beenden des Servers.")
  Input()
  CloseNetworkServer()
Else
  PrintN("Konnte Server nicht erstellen (Wird der Port bereits benutzt ?).")
EndIf

 
End

Verfasst: 14.06.2005 21:14
von AndyX
So geht das:

Code: Alles auswählen

;###########
NewList Clients.l()
;##############
OpenConsole()                                             

ConsoleTitle("Server")                             
ConsoleColor (15, 0)



If InitNetwork() = 0
  PrintN("Konnte Netzwerk nicht finden !")
  End
EndIf

Port = 6832
Buffer = AllocateMemory(1000)

If CreateNetworkServer(Port)

  PrintN("Server wurder erstellt (Port "+Str(Port)+").")
 
  Repeat
     
    SEvent.l = NetworkServerEvent()
 
    If SEvent
   
      ClientID = NetworkClientID()
 
      Select SEvent
     
        Case 1
          PrintN("Ein neuer Client hat sich angemeldet !")
         ;################# 
         AddElement(Clients())
         Clients() = NetworkClientID()
         ;###################
        Case 2
        RtlZeroMemory_(Buffer, 1000)
        ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
        PrintN(""+ PeekS(Buffer))

        Case 3
          PrintN("Client "+ Str(ClientID) + " hat die Verbindung beendet...")
   
   
   

   
      EndSelect
       ;#################
       ;Da kannst du auch machen, was immer du willst.
       If Random(200) = 0 ;Per Zufall ermitteln
         ForEach Clients()
            SendNetowrkString(Clients(),"Ich bin lustig! :)")
         Next
       EndIf
     ;####################
    EndIf
   
  Until Quit = 1
 
  PrintN("Klicke zum beenden des Servers.")
  Input()
  CloseNetworkServer()
Else
  PrintN("Konnte Server nicht erstellen (Wird der Port bereits benutzt ?).")
EndIf

 
End 

Verfasst: 14.06.2005 21:29
von AirTokio
So hab das jetzt alles eingefügt!
Wenn man mit einem Client beendet kommt trotzdem keine Naricht !?!
Und wenn man mit 2 clients verbindet, kommt auf den Clients auch nicht das geschriebene!
Kanns an dem Client liegen?

Hier der Code:

Code: Alles auswählen

OpenConsole()                                              
 
ConsoleTitle("Client")                              
ConsoleColor (15, 0)


If InitNetwork() = 0
   PrintN("Kein Netzwerk gefunden!")
  End
EndIf


Port = 6832
ConnectionID = OpenNetworkConnection("127.0.0.1", Port)


PrintN("Willkommen zu NextConextion!")
PrintN("")
Delay(2000)
Print("Verbindung wird hergestellt")
Delay(1000)
Print(".")
Delay(1000)
Print(".")
Delay(1000)
Print(".")
Delay(1000)
PrintN(".")
PrintN("")

If ConnectionID
  PrintN("Client ist verbunden mit Server...")
  Delay(1000)
  ClearConsole ()

PrintN("Willkommen zum Chat!")
PrintN("")
     
Repeat
     
   
PrintN("")
string$ = Input ()
SendNetworkString(ConnectionID, String$)


     
   
ForEver
  

Else
  PrintN("Konnte Server nicht finden!")
EndIf

Input ()
  
End

Verfasst: 15.06.2005 01:14
von HeX0R
Das hier is übrigens Quark, oder anders gesagt : Mit Kanonen auf Spatzen geschossen:

Code: Alles auswählen

RtlZeroMemory_(Buffer, 1000)
ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
PrintN(""+ PeekS(Buffer))
Besser wäre:

Code: Alles auswählen

Length.l = ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
PrintN(PeekS(Buffer, Length))
Kein Mensch löscht nen ganzen Buffer, wenn er nur nen mickrigen String erwartet.

Warum keine Meldung beim Disconnect kommt ?

Naja, weil du Event 4 und nicht 3 überprüfen solltest...

Ausserdem sendet dein Server eh nur ser selten was zu den Clients (siehe dieses seltsame Random(200) = 0 )

Besser du packst das:

Code: Alles auswählen

ForEach Clients()
  If Clients() <> ClientID
    SendNetworkString(Clients(), PeekS(Buffer, Length))
  EndIf
Next
direkt unter das (s.o.):

Code: Alles auswählen

PrintN(PeekS(Buffer, Length))
Da deine CLients aber im Input() festhängen und keinerlei Signale vom Server auswerten, wirst du trotzdem nie ne Meldung kriegen!
Das werd ich aber nu nicht auch noch erklären, selbst is der Mann...

Ausserdem sollte man *Buffer anstatt Buffer schreiben.
So lässt sich ein Pointer gleich optisch von ner Variablen unterscheiden.