
Chatprogramm
mach ne LinkedList und schick dann zu jedem der da eingetragen is ne nachricht.
Ungefähr so:
So sollte das ungefähr funktionieren 
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

Jo klar 
Kommt aber ein Fehler: "Clients" is not a valid Operator!
Server:

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
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
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:
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
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Das hier is übrigens Quark, oder anders gesagt : Mit Kanonen auf Spatzen geschossen:
Besser wäre:
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:
direkt unter das (s.o.):
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.
Code: Alles auswählen
RtlZeroMemory_(Buffer, 1000)
ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
PrintN(""+ PeekS(Buffer))
Code: Alles auswählen
Length.l = ReceiveNetworkData(NetworkClientID(), Buffer, 1000)
PrintN(PeekS(Buffer, Length))
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
Code: Alles auswählen
PrintN(PeekS(Buffer, Length))
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.